forked from mrlan/EnglishPal
				
			Use PonyORM instead of class RecordQuery from UseSqlite.py. Incorporated changes from Pull Request 91 contributed by He Zhengzheng.
							parent
							
								
									ed1d0fd714
								
							
						
					
					
						commit
						d2f30daab1
					
				|  | @ -1,6 +1,5 @@ | ||||||
| from WordFreq import WordFreq | from WordFreq import WordFreq | ||||||
| from wordfreqCMD import youdao_link, sort_in_descending_order | from wordfreqCMD import youdao_link, sort_in_descending_order | ||||||
| from UseSqlite import InsertQuery, RecordQuery |  | ||||||
| import pickle_idea, pickle_idea2 | import pickle_idea, pickle_idea2 | ||||||
| import os | import os | ||||||
| import random, glob | import random, glob | ||||||
|  | @ -8,6 +7,7 @@ import hashlib | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| from flask import Flask, request, redirect, render_template, url_for, session, abort, flash, get_flashed_messages | from flask import Flask, request, redirect, render_template, url_for, session, abort, flash, get_flashed_messages | ||||||
| from difficulty import get_difficulty_level_for_user, text_difficulty_level, user_difficulty_level | from difficulty import get_difficulty_level_for_user, text_difficulty_level, user_difficulty_level | ||||||
|  | from model.article import get_all_articles, get_article_by_id, get_number_of_articles | ||||||
| import logging | import logging | ||||||
| 
 | 
 | ||||||
| path_prefix = './' | path_prefix = './' | ||||||
|  | @ -15,11 +15,7 @@ db_path_prefix = './db/'  # comment this line in deployment | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def total_number_of_essays(): | def total_number_of_essays(): | ||||||
|     rq = RecordQuery(db_path_prefix + 'wordfreqapp.db') |     return get_number_of_articles() | ||||||
|     rq.instructions("SELECT * FROM article") |  | ||||||
|     rq.do() |  | ||||||
|     result = rq.get_results() |  | ||||||
|     return len(result) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_article_title(s): | def get_article_title(s): | ||||||
|  | @ -33,21 +29,19 @@ def get_article_body(s): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_today_article(user_word_list, visited_articles): | def get_today_article(user_word_list, visited_articles): | ||||||
|     rq = RecordQuery(db_path_prefix + 'wordfreqapp.db') |  | ||||||
|     if visited_articles is None: |     if visited_articles is None: | ||||||
|         visited_articles = { |         visited_articles = { | ||||||
|             "index" : 0,  # 为 article_ids 的索引 |             "index" : 0,  # 为 article_ids 的索引 | ||||||
|             "article_ids": []  # 之前显示文章的id列表,越后越新 |             "article_ids": []  # 之前显示文章的id列表,越后越新 | ||||||
|         } |         } | ||||||
|     if visited_articles["index"] > len(visited_articles["article_ids"])-1:  # 生成新的文章,因此查找所有的文章 |     if visited_articles["index"] > len(visited_articles["article_ids"])-1:  # 生成新的文章,因此查找所有的文章 | ||||||
|         rq.instructions("SELECT * FROM article") |         result = get_all_articles() | ||||||
|     else:  # 生成阅读过的文章,因此查询指定 article_id 的文章 |     else:  # 生成阅读过的文章,因此查询指定 article_id 的文章 | ||||||
|         if visited_articles["article_ids"][visited_articles["index"]] == 'null':  # 可能因为直接刷新页面导致直接去查询了'null',因此当刷新的页面的时候,需要直接进行“上一篇”操作 |         if visited_articles["article_ids"][visited_articles["index"]] == 'null':  # 可能因为直接刷新页面导致直接去查询了'null',因此当刷新的页面的时候,需要直接进行“上一篇”操作 | ||||||
|             visited_articles["index"] -= 1 |             visited_articles["index"] -= 1 | ||||||
|             visited_articles["article_ids"].pop() |             visited_articles["article_ids"].pop() | ||||||
|         rq.instructions('SELECT * FROM article WHERE article_id=%d' % (visited_articles["article_ids"][visited_articles["index"]])) |         article_id = visited_articles["article_ids"][visited_articles["index"]] | ||||||
|     rq.do() |         result = get_article_by_id(article_id) | ||||||
|     result = rq.get_results() |  | ||||||
|     random.shuffle(result) |     random.shuffle(result) | ||||||
| 
 | 
 | ||||||
|     # Choose article according to reader's level |     # Choose article according to reader's level | ||||||
|  |  | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| import hashlib | import hashlib | ||||||
| import string | import string | ||||||
| from datetime import datetime, timedelta | from datetime import datetime, timedelta | ||||||
| from UseSqlite import InsertQuery, RecordQuery |  | ||||||
| 
 | 
 | ||||||
| def md5(s): | def md5(s): | ||||||
|     ''' |     ''' | ||||||
|  |  | ||||||
|  | @ -1,87 +0,0 @@ | ||||||
| ########################################################################### |  | ||||||
| # Copyright 2019 (C) Hui Lan <hui.lan@cantab.net> |  | ||||||
| # Written permission must be obtained from the author for commercial uses. |  | ||||||
| ########################################################################### |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Reference: Dusty Phillips.  Python 3 Objected-oriented Programming Second Edition. Pages 326-328. |  | ||||||
| # Copyright (C) 2019 Hui Lan |  | ||||||
| 
 |  | ||||||
| import sqlite3 |  | ||||||
| 
 |  | ||||||
| class Sqlite3Template: |  | ||||||
|     def __init__(self, db_fname): |  | ||||||
|         self.db_fname = db_fname |  | ||||||
| 
 |  | ||||||
|     def connect(self, db_fname): |  | ||||||
|         self.conn = sqlite3.connect(self.db_fname) |  | ||||||
| 
 |  | ||||||
|     def instructions(self, query_statement): |  | ||||||
|         raise NotImplementedError() |  | ||||||
| 
 |  | ||||||
|     def operate(self): |  | ||||||
|         self.conn.row_factory = sqlite3.Row |  | ||||||
|         self.results = self.conn.execute(self.query) # self.query is to be given in the child classes |  | ||||||
|         self.conn.commit() |  | ||||||
| 
 |  | ||||||
|     def format_results(self): |  | ||||||
|         raise NotImplementedError() |  | ||||||
| 
 |  | ||||||
|     def do(self): |  | ||||||
|         self.connect(self.db_fname) |  | ||||||
|         self.instructions(self.query) |  | ||||||
|         self.operate() |  | ||||||
| 
 |  | ||||||
|     def instructions_with_parameters(self, query_statement, parameters): |  | ||||||
|         self.query = query_statement |  | ||||||
|         self.parameters = parameters |  | ||||||
| 
 |  | ||||||
|     def do_with_parameters(self): |  | ||||||
|         self.connect(self.db_fname) |  | ||||||
|         self.instructions_with_parameters(self.query, self.parameters) |  | ||||||
|         self.operate_with_parameters() |  | ||||||
| 
 |  | ||||||
|     def operate_with_parameters(self): |  | ||||||
|         self.conn.row_factory = sqlite3.Row |  | ||||||
|         self.results = self.conn.execute(self.query, self.parameters) # self.query is to be given in the child classes |  | ||||||
|         self.conn.commit() |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class InsertQuery(Sqlite3Template): |  | ||||||
|     def instructions(self, query): |  | ||||||
|         self.query = query |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class RecordQuery(Sqlite3Template): |  | ||||||
|     def instructions(self, query): |  | ||||||
|         self.query = query |  | ||||||
| 
 |  | ||||||
|     def format_results(self): |  | ||||||
|         output = [] |  | ||||||
|         for row_dict in self.results.fetchall(): |  | ||||||
|             lst = [] |  | ||||||
|             for k in dict(row_dict): |  | ||||||
|                 lst.append( row_dict[k] ) |  | ||||||
|             output.append(', '.join(lst)) |  | ||||||
|         return '\n\n'.join(output) |  | ||||||
| 
 |  | ||||||
|     def get_results(self): |  | ||||||
|         result = [] |  | ||||||
|         for row_dict in self.results.fetchall(): |  | ||||||
|             result.append( dict(row_dict) ) |  | ||||||
|         return result |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == '__main__': |  | ||||||
| 
 |  | ||||||
|     #iq = InsertQuery('RiskDB.db') |  | ||||||
|     #iq.instructions("INSERT INTO inspection Values ('FoodSupplies', 'RI2019051301', '2019-05-13', '{}')") |  | ||||||
|     #iq.do() |  | ||||||
|     #iq.instructions("INSERT INTO inspection Values ('CarSupplies', 'RI2019051302', '2019-05-13', '{[{\"risk_name\":\"elevator\"}]}')") |  | ||||||
|     #iq.do() |  | ||||||
| 
 |  | ||||||
|     rq = RecordQuery('wordfreqapp.db') |  | ||||||
|     rq.instructions("SELECT * FROM article WHERE level=3") |  | ||||||
|     rq.do() |  | ||||||
|     #print(rq.format_results()) |  | ||||||
|  | @ -32,3 +32,17 @@ def get_page_articles(num, size): | ||||||
|             x |             x | ||||||
|             for x in Article.select().order_by(desc(Article.article_id)).page(num, size) |             for x in Article.select().order_by(desc(Article.article_id)).page(num, size) | ||||||
|         ] |         ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_all_articles(): | ||||||
|  |     articles = [] | ||||||
|  |     with db_session: | ||||||
|  |         for article in Article.select(): | ||||||
|  |             articles.append(article.to_dict()) | ||||||
|  |     return articles | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_article_by_id(article_id): | ||||||
|  |     with db_session: | ||||||
|  |         article = Article.get(article_id=article_id) | ||||||
|  |     return [article.to_dict()] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue