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 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 _edit_category(self, cat_name, new_item_list): user = users.get_current_user() categories = list(db.GqlQuery('SELECT * from Category where owner=:1 AND name=:2', user, cat_name)) category = categories[0] old_item_list = [] for item in category.items: old_item_list.append(item.name) items_to_add = list(set(new_item_list) - set(old_item_list)) items_to_delete = list(set(old_item_list) - set(new_item_list)) for item_name in items_to_add: item = Item(name=item_name, category=category, wins=0, losses=0) item.put() deleted_items = category.items.filter('name IN', items_to_delete) for item in deleted_items: item.delete()