def save(self): user = users.get_current_user() if user: category = None cat_name = cgi.escape(self.request.POST['catName']) try: expiry = int(self.request.POST['expiry']) except: expiry = 365 expiry = datetime.now() + timedelta(days=expiry) category_exists = self._check_if_category_exists(cat_name) if category_exists: self._show_home_page({'error': 'Error saving category, a category by that name already exists'}) return item_list = [] for param in self.request.POST.items(): if param[0] != 'catName' and param[0] != 'expiry': if param[1] != '': item_list.append(cgi.escape(param[1])) if len(item_list) < 2: self._show_home_page({'error': 'Error saving category, please retry by creating at least 2 items for the category'}) return category = Category(name=cat_name, owner=user, expiry=expiry) category.put() for item_name in item_list: item = Item(name=item_name, category=category, wins=0, losses=0) item.put() self._show_home_page({'success': 'Saved category "%s" successfully' % cat_name}) else: self.redirect(users.create_login_url("/"))
def import_xml(self): user = users.get_current_user() if user: xml_file = self.request.POST.multi['file'].file xml = '' for line in xml_file.readlines(): xml += line.strip() dom = minidom.parseString(xml) cat_name = dom.getElementsByTagName('CATEGORY')[0].firstChild.childNodes[0].data items = dom.getElementsByTagName('ITEM') item_list = [] for item in items: item_name = item.firstChild.childNodes[0].data item_list.append(item_name) category_exists = self._check_if_category_exists(cat_name) if category_exists: self._edit_category(cat_name, item_list) else: category = Category(name=cat_name, owner=user) category.put() for item_name in item_list: item = Item(name=item_name, category=category, wins=0, losses=0) item.put() self._show_home_page({'success': 'Successfully imported category "%s"' % cat_name}) else: self.redirect(users.create_login_url("/"))
def delete(self, cat_id): category = Category.get_by_id(int(cat_id)) cat_name = category.name for item in category.items: item.delete() category.delete() self._show_home_page({'success': 'Successfully deleted category "%s"' % cat_name})
def result(self, cat_id): template = templates.get('results_items.html') user = users.get_current_user() category = Category.get_by_id(int(cat_id)) items = category.items item_list = [] for item in items: try: percentage = item.wins * 100.0 / (item.wins + item.losses) percentage_str = '%.2f' % percentage except ZeroDivisionError: percentage = -1 percentage_str = '-' item_dict = {'id': item.key().id(), 'name': item.name, 'wins': item.wins, 'losses': item.losses, 'comments': item.comments, 'percentage': percentage, 'comment_count': item.comments.count(), 'percentage_str': percentage_str} item_list.append(item_dict) item_list = sorted(item_list, key=lambda k: k['percentage'], reverse=True) template_values = { 'user' : user.nickname(), 'logout_url': users.create_logout_url("/"), 'items': item_list, 'category': category.name } self.response.out.write(template.render(template_values))
def export(self, cat_id): category = Category.get_by_id(int(cat_id)) self.response.headers['Content-Type'] = 'text/xml' xml_str = '<CATEGORY><NAME>' + category.name + '</NAME>' for item in category.items: xml_str += '<ITEM><NAME>' + item.name + '</NAME></ITEM>' xml_str += '</CATEGORY>' self.response.out.write('<?xml version="1.0" encoding="ISO-8859-1"?>' + xml_str)
def show_edit(self, cat_id): category = Category.get_by_id(int(cat_id)) expires_in = (category.expiry - datetime.now()).days if expires_in < 0: expires_in = 0 template = templates.get('edit_page.html') user = users.get_current_user() template_values = { 'user' : user.nickname(), 'logout_url': users.create_logout_url("/"), 'items': category.items, 'category': category, 'expires_in': expires_in, 'item_count': category.items.count() } self.response.write(template.render(template_values))
def vote(self, cat_id): user = users.get_current_user() template = templates.get('vote.html') category = Category.get_by_id(int(cat_id)) items = category.items selected_items = list(random.sample(set(items), 2)) item1 = self.get_item_dict(selected_items[0]) item2 = self.get_item_dict(selected_items[1]) template_values = { 'user' : user.nickname(), 'logout_url': users.create_logout_url("/"), 'category': category.name, 'item1': item1, 'item2': item2 } self.response.out.write(template.render(template_values))
def save_categories(self): if self.categories is None: return root_id = 1 categories = [c.strip() for c in self.categories.split('>')] parent = None for category in categories: slug = self.create_slug(category) if parent is not None: slug = parent.slug + "-" + slug try: cc_node = Category.get(Category.slug == slug) except: try: cc_node = Category() cc_node.name = category cc_node.slug = slug cc_node.parent_id = parent.id if parent is not None else root_id cc_node.save() cc_node = Category.get(Category.slug == slug) except: pass parent = cc_node try: cp = CategoryProduct() cp.asin = self.asin cp.category_id = cc_node.id cp.save() except: pass
def search(self): user = users.get_current_user() if user: template = templates.get('search.html') search_term = cgi.escape(self.request.POST['searchTerm']) categories = Category.all().search(search_term, properties=['name']) entity_list = [] for category in categories: entity_list.append({'type': 'Category', 'name': category.name}) items = Item.all().search(search_term, properties=['name']) for item in items: entity_list.append({'type': 'Item', 'name': item.name}) template_values = { 'user' : user.nickname(), 'logout_url': users.create_logout_url("/"), 'entities': entity_list } self.response.write(template.render(template_values)) else: self.redirect(users.create_login_url("/"))
def write_category_to_mongo(category, parent_pageid): category['title'] = category['title'].replace('Category:', '') if Category.objects(pageid=category['pageid']).count() == 0: this_category = Category(pageid=category['pageid'], title=category['title']) this_category.save() this_category = Category.objects(pageid=category['pageid']).first() if parent_pageid is not None: parent_category = Category.objects(pageid=parent_pageid).first() this_category.parent_pageid = parent_pageid this_category.parent_title = parent_category.title this_category.save() return this_category