def update_article(self): inputs = self.get_input() if web.ctx.method == "GET": article_id = inputs.get("article_id") category_list = Categories.select().where(Categories.status == 0) article = Articles.get_or_none(Articles.id == article_id) print(article.id) self.private_data["article"] = article self.private_data["category_list"] = category_list return self.display("admin/update_article") else: article_id = inputs.get("article_id") name = inputs.get('name') content = inputs.get('content') summary = inputs.get("summary") category_id = inputs.get("category_id") source_url = inputs.get("source_url", "") keywords = str(inputs.get("keywords", "")).strip() article = Articles.get_or_none(Articles.id == article_id) try: tags_list = keywords.split(",") if keywords else [] if tags_list: got_tags = Tags.select().where(Tags.name.in_(tags_list)) tmp_list = [] for tag in got_tags: tmp_list.append(tag.name) for tag_str in tags_list: tag_str.strip() if tag_str not in tmp_list: t = Tags(name=tag_str) t.save() db = TinyDB('settings/db.json') db.truncate() db.close() article.update(name=name, content=content, summary=summary, category_id=category_id, original_address=source_url, keywords=keywords, updateTime=time()).where( Articles.id == article_id).execute() self.private_data["update_success"] = True return web.seeother(self.make_url('articles')) except Exception as e: log.error('update article failed %s' % traceback.format_exc()) log.error('input params %s' % inputs) self.private_data["update_success"] = False return web.seeother(self.make_url('update_article'))
def search_list(self): """ 文章搜索列表 :return: """ inputs = self.get_input() page = int(inputs.get('page', 1)) page_size = int(inputs.get('page_size', 20)) keywords = inputs.get('keywords', None) self.private_data['article_list'] = [] self.private_data['current_page'] = 1 self.private_data['total_page'] = 0 self.private_data['category_list'] = [] self.private_data['keywords'] = keywords try: category_list = Categories.select().where(Categories.status == 0). \ order_by(Categories.id.desc()) if keywords: article_query = Articles.select().where( Articles.name.contains(keywords)) total_count = article_query.count() total_page = (total_count + page_size - 1) / page_size self.private_data['total_page'] = total_page self.private_data['current_page'] = page self.private_data['category_list'] = category_list self.private_data['article_list'] = article_query.\ paginate(page, page_size) return self.display('front/search_list') except Exception as e: log.info('Failed to get search result. Keywords is %s. Error msg is', keywords, e) log.error(traceback.format_exc()) return self.display('front/search_list')
def save(self): userInput = self.getInput() try: if not self.isAdmin(): return self.error(msg="权限不足!", url=self.makeUrl("/admin/articles/list")) thumbnail = int(userInput["thumbnail"]) Articles.create( category=int(userInput["category"]), name=userInput["name"], thumbnail=thumbnail, content=userInput["content"], ) except Exception, e: return self.error(msg="新增文章失败: %s" % e, url=self.makeUrl("/admin/articles/list"))
def test_get_article_by_id_with_nonexistent_id(): articles_data = [{ 'id': 1, 'name': 'water', 'price': 100 }, { 'id': 2, 'name': 'honey', 'price': 200 }, { 'id': 3, 'name': 'mango', 'price': 400 }] articles = Articles(data=articles_data) assert articles.get_article_by_id(article_id=4) == {}
def articles_index_show(feed_id): if feed_id is None: abort(404) else: articles = Articles.articles_for_feed(feed_id) if articles is None: abort(404) return json.dumps({"articles": articles})
def seed_data(): try: articles = Articles(title='Test Post', description='This is a description') db.session.add(articles) db.session.commit() print("success seed data") except Exception as err: exit(err)
def delete(self): inputParams = self.getInput() try: current_user = Users.get(Users.name == self.isLogin()) if not self.isAdmin(): return self.error(msg="权限不足!", url=self.makeUrl("/admin/articles/list")) article = Articles.get(Articles.id == int(inputParams["id"])) article.delete_instance() except Exception, e: return self.error(msg="删除文章失败: %s" % e, url=self.makeUrl("/admin/articles/list"))
def stores(): try: data = request.get_json() title = data['title'] description = data['description'] article = Articles(title=title, description=description) db.session.add(article) db.session.commit() article_data = get_articles() return response(data=article_data, code=200, message="success") except Exception as err: return response(code=202, message=str(err))
def search(self): inputParams = self.getInput() keywords = inputParams["keywords"].strip().lower() if inputParams.has_key("keywords") else "" page = int(inputParams["page"]) if inputParams.has_key("page") else 1 count = config.COUNT_PER_PAGE articlesList = Articles.select().where(Articles.name.contains(keywords)) pageString = self.getPageStr(self.makeUrl("/admin/articles/list"), page, count, articlesList.count()) articlesList = articlesList.order_by(Articles.id.desc()) self.privData["ARTICLES_LIST"] = articlesList.paginate(page, page + count) self.privData["PAGE_STRING"] = pageString self.privData["ARTICLES_LIST"] = articlesList return self.display("articlesList")
def list(self): inputParams = self.getInput() page = int(inputParams["page"]) if inputParams.has_key("page") else 1 count = config.COUNT_PER_PAGE articlesList = Articles.select() pageString = self.getPageStr(self.makeUrl("/admin/articles/list"), page, count, articlesList.count()) articlesList = articlesList.order_by(Articles.id.desc()) self.privData["ARTICLES_LIST"] = articlesList.paginate(page, page + count) self.privData["PAGE_STRING"] = pageString self.privData["ARTICLES_LIST"] = articlesList return self.display("articlesList")
def get_articles_center(self): inputs = self.get_input() try: page = int(inputs['page']) if inputs.has_key('page') else 1 category_id = inputs['category_id'] articles = Articles.select().where( Articles.category == category_id).order_by(Articles.id.desc()) return json.dumps([{ 'id': it.id, 'name': it.name, 'thumbnail': it.thumbnail.thumbnail, 'content': self.htmlunquote(it.content), } for it in articles.paginate(page, PAGINATE_COUNT_10)]) except Exception as e: log.error('get_articles_center%s' % traceback.format_exc()) return self.error()
def modify(self): inputParams = self.getInput() try: print inputParams["category"] print inputParams["id"] articleId = int(inputParams["id"]) q = Articles.update( category=int(inputParams["category"]), name=inputParams["name"], content=inputParams["content"], thumbnail=int(inputParams["thumbnail"]), ).where(Articles.id == articleId) q.execute() except Exception, e: return self.error(msg="文章修改失败: %s" % e, url=self.makeUrl("/admin/articles/list"))
def generate_output(self): articles = Articles(data=self.input_data.get('articles', [])) delivery = DeliveryFee(data=self.input_data.get('delivery_fees', [])) discount = Discount(data=self.input_data.get('discounts', [])) checkout_list = [] for cart_data in self.input_data.get('carts', []): cart = Cart(cart_id=cart_data.get('id'), items=cart_data.get('items'), articles=articles, delivery=delivery, discount=discount) checkout_list.append({'id': cart.id, 'total': cart.total}) return {'carts': checkout_list}
def edit(self): inputParams = self.getInput() userName = self.isLogin() if userName != "admin": return self.error(msg="权限不足!", url=self.makeUrl("/admin/articles/list")) articleID = int(inputParams["id"]) article = Articles.get(Articles.id == articleID) self.privData["ARTICLE"] = article user = Users.get(Users.name == userName) albumsList = Albums().select().where(Albums.owner == user.id) imagesList = Images().select().where(Images.owner == user.id) categoriesList = Categories().select() # 确认当前用户是否至少有一个包含图片的专辑 if not albumsList.count(): return self.error(msg="请创建至少一个专辑!", url=self.makeUrl("/admin/albums/list")) if not imagesList.count(): return self.error(msg="请创建至少一个图片!", url=self.makeUrl("/admin/images/list")) # 分类列表 self.privData["CATEGORIES_LIST"] = categoriesList # 构建{album: images}, 同时排除不包括任何图片的专辑 album_images_map = {} excluded_albums = [] for album in albumsList: album_images = imagesList.where(Images.album == album.id) if album_images.count(): album_images_map[album.id] = album_images else: excluded_albums.append(album.id) self.privData["ALBUMS_LIST"] = [album for album in albumsList if album.id not in excluded_albums] self.privData["IMG_ALBUMS_LIST"] = album_images_map self.privData["CURRENT_ARTICLE"] = article self.privData["CURRENT_ALBUM"] = article.thumbnail.album self.privData["CURRENT_IMG"] = article.thumbnail self.privData["SUBMIT_NAME"] = "thumbnail" return self.display("articleEdit")
def article_tag_list(self): """标签下文章列表:return:""" inputs = self.get_input() tag = inputs.get('tag', None) self.private_data['category_list'] = [] self.private_data['tag'] = tag self.private_data['article_list'] = [] try: category_list = Categories.select().where(Categories.status == 0).\ order_by(Categories.id.desc()) if tag: article_query = Articles.select().where(Articles.keywords.contains(tag)) self.private_data['category_list'] = category_list self.private_data['article_list'] = article_query.paginate(1, 20) return self.display('front/tags_list') except Exception as e: log.info('Failed to get search result.tag is%s.Error msg is', tag, e) log.error(traceback.format_exc()) return self.display('front/tags_list') \
def get_tags(self): db = TinyDB('settings/db.json') table = db.table('_default') res = table.get(where('name') == 'tags') if res: data = res.get("data") tags_dict_list = json.loads(data) else: tags_list = Tags.select().where(Tags.status == 0) tags_dict_list = [] for tag in tags_list: count = Articles.select().where( Articles.keywords.contains(str(tag.name))).count() tags_dict_list.append({tag.name: count}) db.truncate() table = db.table('_default') table.insert({"name": "tags", "data": json.dumps(tags_dict_list)}) db.close() return tags_dict_list
def articles(self): inputs = self.get_input() page = int(inputs.get('page', 1)) page_size = int(inputs.get('page_size', 20)) self.private_data['current_page'] = page self.private_data['total_page'] = 0 self.private_data['article_list'] = [] try: article_query = Articles.select().where(Articles.status == 0) \ .order_by(Articles.id.asc()) total_count = article_query.count() total_page = (total_count + page_size - 1) / page_size self.private_data['total_page'] = total_page self.private_data['article_list'] = \ article_query.paginate(page, page_size).execute() return self.display('admin/article_list') except Exception as e: log.error('Failed to get article list data. Error msg %s', e) log.error(traceback.format_exc()) return self.display('admin/article_list')
def process_articles(article_list): ''' Function that processes the article results and transform them to a list of objects Args: article_list: A list of dictionaries that contain article details Returns : article_results: A list of article objects ''' article_results = [] for article_item in article_list: source = article_item.get('source') title = article_item.get('title') urlToImage = article_item.get('urlToImage') description = article_item.get('description') urlToArticle = article_item.get('url') publishedAt = article_item.get('publishedAt') article_object = Articles(source, title, description, urlToImage, urlToArticle, publishedAt) article_results.append(article_object) return article_results
def GET(self): """ 首页 :return: """ inputs = self.get_input() page = int(inputs.get('page', 1)) page_size = int(inputs.get('page_size', 20)) self.private_data['article_list'] = [] self.private_data['current_page'] = 1 self.private_data['total_page'] = 0 self.private_data['category_list'] = [] try: album = Albums.get(Albums.is_show == 1) images = Images.select().where(Images.status == 0, Images.album == album.id) images_dict_list = [] for image in images.dicts().iterator(): image_dict = { 'link': image.get("link"), 'url': config.WEB_URL + 'static/uploads/' + image.get("uuid") + '.jpeg' } images_dict_list.append(image_dict) category_list = Categories.select().where( Categories.status == 0). \ order_by(Categories.id.desc()) article_query = Articles.select().where(Articles.status == 0). \ order_by(Articles.id.desc()) article_list = article_query.paginate(page, page_size) total_count = article_query.count() total_page = (total_count + page_size - 1) / page_size self.private_data['article_list'] = article_list.execute() self.private_data['current_page'] = page self.private_data['total_page'] = total_page self.private_data['images_list'] = images_dict_list self.private_data['category_list'] = category_list.execute() except Exception as e: log.error('Failed to get home data. Error msg %s', e) log.error(traceback.format_exc()) return self.display('front/index')
def article_info(self): """ 文章详情信息 :return: """ inputs = self.get_input() article_id = int(inputs.get('article_id', 1)) self.private_data['article'] = None self.private_data['category_list'] = [] try: category_list = Categories.select().where(Categories.status == 0). \ order_by(Categories.id.desc()).execute() article = Articles.get(Articles.id == article_id) self.private_data['article'] = article self.private_data['category_list'] = category_list return self.display('front/article_info') except Exception as e: log.info('Failed to get article info. Article id is %s. Error msg ' 'is', article_id, e) log.error(traceback.format_exc()) return self.display('front/article_info')
def test__calculate_items_total(): articles = Articles(data=ARTICLES_DATA) delivery = DeliveryFee(data=DELIVERY_DATA) discount = Discount(data=[]) items = [ { 'article_id': 1, 'quantity': 6 }, { 'article_id': 2, 'quantity': 2 }, ] cart = Cart(cart_id=1, items=items, articles=articles, delivery=delivery, discount=discount) assert cart._calculate_items_total() == 100 * 6 + 200 * 2
def test_total_with_delivery_fee(): articles = Articles(data=ARTICLES_DATA) delivery = DeliveryFee(data=DELIVERY_DATA) discount = Discount(data=[]) items = [ { 'article_id': 1, 'quantity': 6 }, { 'article_id': 2, 'quantity': 2 }, ] cart = Cart(cart_id=1, items=items, articles=articles, delivery=delivery, discount=discount) assert cart.total == (100 * 6 + 200 * 2) + 400
def test__apply_delivery_fee(): articles = Articles(data=ARTICLES_DATA) delivery = DeliveryFee(data=DELIVERY_DATA) discount = Discount(data=[]) items = [ { 'article_id': 1, 'quantity': 6 }, { 'article_id': 2, 'quantity': 2 }, ] cart = Cart(cart_id=1, items=items, articles=articles, delivery=delivery, discount=discount) cart_price = 1000 assert cart._apply_delivery_fee(price=cart_price) == cart_price + 400
def articles(self): """ 文章分类列表 :return: """ inputs = self.get_input() page = int(inputs.get('page', 1)) page_size = int(inputs.get('page_size', 20)) category_id = int(inputs.get('category_id', 2)) self.private_data['article_list'] = [] self.private_data['current_page'] = 1 self.private_data['total_page'] = 0 self.private_data['category_list'] = [] self.private_data['current_category'] = None try: category = Categories.get(Categories.id == category_id) category_list = Categories.select().where(Categories.status == 0).\ order_by(Categories.id.desc()) article_query = Articles.select().where( Articles.category == category.id).order_by(Articles.id.desc()) article_list = article_query.paginate(page, page_size) total_count = article_query.count() total_page = (total_count + page_size - 1) / page_size self.private_data['article_list'] = article_list self.private_data['current_category'] = category self.private_data['current_page'] = page self.private_data['category_list'] = category_list self.private_data['total_page'] = total_page return self.display('front/article_list') except Exception as e: log.error('Failed to get category articles data. ' 'Category_id is %s Error msg %s', category_id, e) log.error(traceback.format_exc()) # return self.error(msg="获取列表信息失败!", url=self.make_url('/views/home')) return self.display('front/article_list')
def articles_show(feed_id, article_id): article = Articles.get(feed_id, article_id) if article is None: abort(404) else: return json.dumps(article)
def test_get_article_by_id_with_empty_data(): articles_data = [] articles = Articles(data=articles_data) assert articles.get_article_by_id(article_id=4) == {}
def by_article(feed_id, article_id): article = Articles.get(feed_id, article_id) articles = Articles.articles_for_feed(feed_id) rank = ArticleRecommender(article['classification'], articles) return json.dumps(rank.recommend(10, exclude_ids=[article_id]))
def for_user(): user_affinity = Config.user_affinity articles = Articles.all_articles() rank = ArticleRecommender(user_affinity, articles) return json.dumps(rank.recommend(10))