forked from mrlan/EnglishPal
				
			update .gitignore to ignore the folder .idea
						commit
						d431c0cb4b
					
				|  | @ -1,3 +1,4 @@ | |||
| .idea/ | ||||
| venv/ | ||||
| app/__init__.py | ||||
| app/__pycache__/ | ||||
|  |  | |||
|  | @ -0,0 +1,3 @@ | |||
| # Default ignored files | ||||
| /shelf/ | ||||
| /workspace.xml | ||||
|  | @ -0,0 +1,12 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="PYTHON_MODULE" version="4"> | ||||
|   <component name="NewModuleRootManager"> | ||||
|     <content url="file://$MODULE_DIR$" /> | ||||
|     <orderEntry type="inheritedJdk" /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|   </component> | ||||
|   <component name="PyDocumentationSettings"> | ||||
|     <option name="format" value="PLAIN" /> | ||||
|     <option name="myDocStringFormat" value="Plain" /> | ||||
|   </component> | ||||
| </module> | ||||
|  | @ -0,0 +1,6 @@ | |||
| <component name="InspectionProjectProfileManager"> | ||||
|   <settings> | ||||
|     <option name="USE_PROJECT_PROFILE" value="false" /> | ||||
|     <version value="1.0" /> | ||||
|   </settings> | ||||
| </component> | ||||
|  | @ -0,0 +1,7 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" /> | ||||
|   <component name="PyCharmProfessionalAdvertiser"> | ||||
|     <option name="shown" value="true" /> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -0,0 +1,8 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ProjectModuleManager"> | ||||
|     <modules> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/englishpal.iml" filepath="$PROJECT_DIR$/.idea/englishpal.iml" /> | ||||
|     </modules> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -0,0 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$" vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -1,3 +1,2 @@ | |||
| FROM tiangolo/uwsgi-nginx-flask:python3.6 | ||||
| COPY ./app /app | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ pipeline { | |||
|             steps { | ||||
|                 echo 'Building..' | ||||
| 		sh 'sudo docker build -t englishpal .' | ||||
| 		sh 'sudo docker stop $(sudo docker ps -aq)' | ||||
| 		sh 'sudo docker stop $(docker ps -aq)' | ||||
| 		sh 'sudo docker run -d -p 91:80 -v /var/lib/jenkins/workspace/EnglishPal_Pipeline_master/app/static/frequency:/app/static/frequency -t englishpal' | ||||
|             } | ||||
|         } | ||||
|  |  | |||
							
								
								
									
										10
									
								
								app/main.py
								
								
								
								
							
							
						
						
									
										10
									
								
								app/main.py
								
								
								
								
							|  | @ -282,6 +282,12 @@ def familiar(username,word): | |||
|     pickle_idea.familiar(user_freq_record,word) | ||||
|     return redirect(url_for('userpage', username=username)) | ||||
| 
 | ||||
| @app.route("/<username>/<word>/del", methods=['GET', 'POST']) | ||||
| def deleteword(username,word): | ||||
|     user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username) | ||||
|     pickle_idea2.deleteRecord(user_freq_record,word) | ||||
|     return redirect(url_for('userpage', username=username)) | ||||
| 
 | ||||
| @app.route("/<username>", methods=['GET', 'POST']) | ||||
| def userpage(username): | ||||
|      | ||||
|  | @ -356,9 +362,9 @@ def userpage(username): | |||
|                 freq = x[1] | ||||
|                 if isinstance(d[word], list): # d[word] is a list of dates | ||||
|                     if freq > 1: | ||||
|                         page += '<p class="new-word"> <a href="%s">%s</a>(<a title="%s">%d</a>) <a href="%s/%s/familiar">熟悉</a> <a href="%s/%s/unfamiliar">不熟悉</a>  </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word) | ||||
|                         page += '<p class="new-word"> <a href="%s">%s</a>(<a title="%s">%d</a>) <a href="%s/%s/familiar">熟悉</a> <a href="%s/%s/unfamiliar">不熟悉</a>  <a href="%s/%s/del">删除</a> </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word, username,word) | ||||
|                     else: | ||||
|                         page += '<p class="new-word"> <a href="%s">%s</a>(<a title="%s">%d</a>) <a href="%s/%s/familiar">熟悉</a> <a href="%s/%s/unfamiliar">不熟悉</a>   </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word) | ||||
|                         page += '<p class="new-word"> <a href="%s">%s</a>(<a title="%s">%d</a>) <a href="%s/%s/familiar">熟悉</a> <a href="%s/%s/unfamiliar">不熟悉</a>  <a href="%s/%s/del" >删除</a> </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word, username,word) | ||||
|                 elif isinstance(d[word], int): # d[word] is a frequency. to migrate from old format. | ||||
|                     page += '<a href="%s">%s</a>%d\n' % (youdao_link(word), word, freq) | ||||
|         return page | ||||
|  |  | |||
|  | @ -25,6 +25,15 @@ def lst2dict(lst, d): | |||
|         else: | ||||
|             d[word] += dates | ||||
| 
 | ||||
| def deleteRecord(path,word): | ||||
|     with open(path, 'rb') as f: | ||||
|         db = pickle.load(f) | ||||
|     try: | ||||
|         db.pop(word) | ||||
|     except KeyError: | ||||
|         print("sorry") | ||||
|     with open(path, 'wb') as ff: | ||||
|             pickle.dump(db, ff) | ||||
| 
 | ||||
| def dict2lst(d): | ||||
|     if len(d) > 0: | ||||
|  |  | |||
|  | @ -0,0 +1,61 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Run the docker image using the following command: | ||||
| # docker run -d -p 4444:4444 selenium/standalone-chrome | ||||
| from selenium import webdriver | ||||
| from selenium.webdriver.common.desired_capabilities import DesiredCapabilities | ||||
| 
 | ||||
| import random, time | ||||
| import string | ||||
| 
 | ||||
| # 调用本地chromedriver | ||||
| # driver = webdriver.Chrome(executable_path="D:\ChromeDriver\chromedriver.exe") | ||||
| # driver.get("http://127.0.0.1:5000/") | ||||
| driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.CHROME) | ||||
| driver.implicitly_wait(10) | ||||
| # driver.maximize_window() | ||||
| # HOME_PAGE = "http://127.0.0.1:5000/" | ||||
| 
 | ||||
| 
 | ||||
| HOME_PAGE = 'http://121.4.94.30:91/' | ||||
| 
 | ||||
| 
 | ||||
| def test_delete_word(): | ||||
|     try: | ||||
|         driver.get(HOME_PAGE) | ||||
|         assert 'English Pal -' in driver.page_source | ||||
|         # login | ||||
|         elem = driver.find_element_by_link_text('登录') | ||||
|         elem.click() | ||||
| 
 | ||||
|         uname = 'lanhui' | ||||
|         password = 'l0ve1t' | ||||
|         elem = driver.find_element_by_name('username') | ||||
|         elem.send_keys(uname) | ||||
| 
 | ||||
|         elem = driver.find_element_by_name('password') | ||||
|         elem.send_keys(password) | ||||
| 
 | ||||
|         elem = driver.find_element_by_xpath('//form[1]/p[3]/input[1]')  # 找到登录按钮 | ||||
|         elem.click() | ||||
| 
 | ||||
|         assert 'EnglishPal Study Room for ' + uname in driver.title | ||||
| 
 | ||||
|         # delete | ||||
|         elems = driver.find_element_by_class_name('new-word') | ||||
|         # 移动到元素elems对象的“顶端”与当前窗口的“顶部”对齐 | ||||
|         driver.execute_script("arguments[0].scrollIntoView();", elems) | ||||
|         driver.save_screenshot('test_delete_pic1.png') | ||||
|         current_2 = elems.text | ||||
|         elem = driver.find_element_by_link_text("删除") | ||||
|         elem.click() | ||||
|         elems = driver.find_element_by_class_name('new-word') | ||||
|         driver.execute_script("arguments[0].scrollIntoView();", elems) | ||||
|         driver.save_screenshot('test_delete_pic2.png') | ||||
|         now_2 = elems.text | ||||
| 
 | ||||
|         assert current_2 != now_2 | ||||
| 
 | ||||
|     finally: | ||||
|         driver.quit() | ||||
| 
 | ||||
| # test_delete_word() | ||||
		Loading…
	
		Reference in New Issue