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