studi's People
studi's Issues
Configuration에 대한 명세 (YAML 형식)
각종 구성(Configuration)에 대한 명확한 가이드라인을 정해야 함
YAML 형식의 config 파일 생성 및 config 관리 모듈 작성
-
몇번 포트로 띄울 것인지
-
로깅을 어느 수준까지 남길지
-
DB 파일의 위치
Studi 2.0 renewal goal
- 패키지 구조 개선
- flask, python의 일반적인 패키지 구조에 맞게 개선
- XML 형식의 노트 작성 방식 폐기, CSV 형식의 노트 작성 방식 구현
- 현재의 노트 작성 방식
<note name="노트 제목"><item title="항목 이름">항목 내용</item><item title="항목 이름">항목 내용</item></note>
- 현재의 노트 작성 방식
- SQLite-Studi 인터페이스에 raw SQL query statement 사용 폐기, ORM 적용
- SQLAlchemy 사용 예정
- YAML 형식의 config 파일 생성 및 config 관리 모듈 작성
- 테스트 코드 개선, 단위 테스트 보충
- 문서화
- 코드 문서화 -> Sphinx 사용
- Readme 파일에 How to install & use Studi 가이드 내용 포함
- 배포 자동화 적용
- Travis, Docker(Docker hub) 사용한 배포 자동화
패키지 구조 개선
flask, python의 일반적인 패키지 구조에 맞게 개선
- to be updated
파일 업로드 기능
quiz용 파일 업로드
SQLite에 대한 ORM 적용
- 이 이슈는 csv_quiz_uploader(#45) branch로부터 파생한 apply_orm에서 구현되고 있음
-
SQLite-Studi 인터페이스에 raw SQL query statement 사용 폐기, ORM 적용
-
ORM으로는 Flask-SQLAlchemy으로 적용할 예정임
Flask-SQLALchemy Document (http://flask-sqlalchemy.pocoo.org/2.3/) -
SQLite 테이블 확인을 위해 DB Browser for SQLite 설치 후 사용(https://sqlitebrowser.org/dl/)
-
DB 생성하기 구현
-
기본적인 데이터 삽입, 데이터 삭제, 데이터 추가 함수 구현
-
퀴즈 풀때 imp, und 업데이트 하는 부분도 수정하여 구현
-
테스트 코드 구현 (insert, select, delete, update)
-
노트를 삭제할 때 note_id를 외래키로 참조하고 있는 clauses와 clausePoints의 데이터도 같이 삭제하는 함수 별도 구현
-
Flask_SQLAchemy 패키지(version=2.3.2)를 적용하여 upload.py의 save_csv_contents_to_db 함수 구현
pip3 install flask_sqlalchemy
-
DB 없을 시에 생성하고 있으면 유효한 DB 인지 검증(?)
-
intf_db.py 파일을 필요 없으면 정리할 것
-
테스트 html에 코드에 적용
index로 이동하는 버튼 구현
index로 이동 할 수 있는 버튼 구현
collapse 형태로 퀴즈 부분 수정
퀴즈의 title과 content를 bootstrap의 collapse 형태로 펼치고 보일 수 있도록 수정
따라서 버튼은 아래에 fixed 될 수 있도록 수정해야 함
나머지 부분은 content의 내용에 따라 스크롤 될 수 있도록 해야함
노트를 csv 파일로 업로드하는 방식으로 개선
노트를 등록하는 방식을 CSV 파일 형태로 업로드하는 방식으로 개선한다.
csv 파일 하나는 노트의 단위이다.(파일명이 노트의 이름이다)
title/content는 맨 위 상단에 title, content로 구분이 되어 있어야 한다.
-
csv 파일을 읽어들이는 함수(UploadCSVMaterial) 구현
(Flask_RESTful에서 사용하는 모든 request parser(reqparse 포함)는 제거될 예정이므로, marshmallow로 적용할지 추후 고려해 볼것)
(참고 링크 : https://flask-restful.readthedocs.io/en/0.3.5/reqparse.html) -
업로드된 파일에 대한 예외처리가 필요함
- 형식에 맞지 않은 문서 (csv 파일이 아닌 경우)
-
Notes의 post 부분에 포함 시키도록 변경
추후 이슈 추가해서 처리
- title이나 contents에 대한 명시가 없는 경우 (column이 2개면 허용 or 명시하지 않으면 예외처리?)
decorator를 사용한 logging 방식으로 변경
모듈별로 발생할 수도 있는 exception을 고려하여 decorator를 사용한 logging 방식으로 변경
- 목적별 로깅을 고려할 것 (디버깅용 로깅, 데이터 분석 등등)
- 기존 로깅 방식을 decorator 형식으로 변경 할 것
- 파일을 구조화 할 것 (모듈별 로깅 function을 한 파일로 모을지 말지 여부)
기존 노트에 대한 수정/추가/삭제 기능 구현
새로운 방식에서는 기존 노트에 대한 수정/추가/삭제, point에 대한 일괄 변경이 가능하도록 기능을 추가
이유 :
기존 방식은 한번 업로드 하면 오타가 있어도 수정이 불가능하고 노트를 삭제한 후 재 업로드 해야 함
그렇게 되면, 기존에 point에 대한 정보가 초기화됨
고려할 사항:
- ui 화면을 어떻게 구성할 것인가
- pc 버전을 이제 지원하는가 (기존은 모바일 타겟이었음)
테스트 코드 개선, 단위 테스트 보충
새로 추가되는 기능 및 그 외에도 더 추가해야 하는 테스트 코드 추가, 개선
- DB 생성
- table에서 데이터 삭제 / 로그
- table에 데이터 추가 / 로그
- table에서 데이터 조회 / 로그
- table에 데이터 업데이트 / 로그
- rest api에 대한 요청후 응답 테스트 / 로그
pointlist 업데이트 기능
origin 값을 가지고 있고 다음 퀴즈로 넘어갈 때
기존에 저장한 데이터와 현재의 point 데이터가 다를 경우에만 업데이트 되도록
변경 사항이 있는지에 대한 isChanged 플래그 사용하여 업데이트 되도록 수정
REST API 구조로 변경하기
<기존 방식>
view.py에서 @app.route('/note/int:note_id')로 html을 반환받거나
upload.py 에서 UploadMaterial에서 파일을 업로드하거나
rest_api.py에서 리소스에 대한 데이터를 처리하는 등 이곳저곳에서
요청을 처리하여 반환하였음
<변경 방식>
모든 리소스에 대한 처리를 rest_api.py 에서 REST의 원칙에 따라서
리소스의 GET, POST, DELETE, PUT에 대한 요청을 처리하고 데이터를 반환하는 것으로 변경한다.
-
각 리소스(Notes, Clauses, Clause_points)마다 사용할 HTTP Method를 정의한다
-
각 리소스를 Method 별로 테스트 코드를 작성한다
<남겨진 과제>
서버에서 렌더링하여 html을 반환하지 않고 서버와 클라이언트를 분리하는 작업을 추후 진행
사용자를 위한 문서화 (Sphinx 사용)
이 프로젝트를 가져다가 누구나 사용가능하도록 문서화
Sphinx document : http://www.sphinx-doc.org/en/master/
포함할 내용
- virtualenv 설정
- sqlite 설치 및 사용
- csv 형식
- 설치 및 run 하는 방법
배포 자동화 적용 (Docker, Travis)
배포 자동화 적용
Travis, Docker(Docker hub) 사용한 배포 자동화
타이머 기능 구현
사용자가 원하는 시간 만큼 퀴즈에 타이머 걸기기
Parsing data that includes special characters problem
다음/이전 퀴즈로 이동 시 동작 기능 구현
처음/마지막 퀴즈에서 뒤로/다음으로 이동 시 servey 하는 부분이 보이도록 수정
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.