Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions common/consts.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from enum import Enum
# Permission Levels
Everyone = 0
User = 1
Expand Down
2 changes: 1 addition & 1 deletion common/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def inner(request, *args, **kwargs):
data: dict = parse_data(request)
if data is None or not isinstance(data, dict):
return failed_api_response(StatusCode.INVALID_REQUEST_ARGUMENT)
if not data.keys() <= fields:
if not set(data.keys()) <= set(fields):
return failed_api_response(StatusCode.INVALID_REQUEST_ARGUMENT)
kwargs["data"] = data
return func(request, *args, **kwargs)
Expand Down
10 changes: 8 additions & 2 deletions nocode_backend/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,14 @@

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'OCR_DB', #数据库名字
'USER': 'postgres', #用户名
"PASSWORD" : 'my981102', #自己的密码
"HOST":'',
'PORT':5432,
}
}

Expand Down
2 changes: 1 addition & 1 deletion ocr/api/ocr_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def receieve_ocr_photo(request: HttpRequest, project_id: int):
id=project_id).filter(belong_to=user).first()
if not project:
return failed_api_response(StatusCode.REFUSE_ACCESS)

# TODO:: fetch something from request and pass them to ocr_handler


Expand Down
24 changes: 17 additions & 7 deletions ocr/api/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,26 @@ def create_project(request: HttpRequest, **kwargs):

[method]: POST
"""
name = kwargs.get("name")
comment = kwargs.get("comment")
# name = kwargs.get("name")
# comment = kwargs.get("comment")
name = request.POST.get("name")
comment = request.POST.get("comment")

if len(name) == 0:
return failed_api_response(StatusCode.INVALID_REQUEST_ARGUMENT, "Project name is required")

project: Project = Project.objects.create({
"name": name,
"comment": comment,
"belong_to": request.user
})
# project: Project = Project.objects.create({
# "name": name,
# "comment": comment,
# "belong_to": request.user
# })
project: Project = Project(
name = name,
comment = comment,
belong_to = request.user
)

project.save()

return success_api_response({
"id": project.id,
Expand Down
Empty file added ocr/tests/__init__.py
Empty file.
60 changes: 60 additions & 0 deletions ocr/tests/test_project.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.test import Client
import json
from ocr.models.project import Project
from ocr.models.recognition_result import RecognitionResult

class ProjectTestCase(TestCase):
def setUp(self):
self.c = Client()
self.UserModel = get_user_model()

def test_create_project(self):
self.c.post('/auth/create', {'username':'testuser', 'password':'password', 'email':'email'}, {'content_type':"application/json"})
response = self.c.post('/auth/', {'username':'testuser', 'password':'password'}, {'content_type':"application/json"})
access_token = json.loads(response.content.decode())['access_token']
self.c.defaults['HTTP_AUTHORIZATION'] = 'Bearer ' + access_token

self.c.post('/ocr/project', {'name': 'project1', 'comment': 'comment1'},
{'content_type':"application/json"})
data = json.loads(response.content.decode())
project_id = data['id']
project = Project.objects.filter(id=project_id)
self.assertEqual(project.name, 'project1')
self.assertEqual(project.comment, 'comment1')

def test_update_project(self):
project_id = Project.objects.first().id
self.c.put('/ocr/project/'+project_id, {'name': 'project2', 'comment': 'comment2'},
{'content_type': "application/json"})
project = Project.objects.filter(id=project_id)
self.assertEqual(project.name, 'project2')
self.assertEqual(project.comment, 'comment2')

def test_list_projects(self):
response = self.c.get('/ocr/project', {}, {'content_type': "application/json"})
data = json.loads(response.content.decode())
projects = Project.objects.filter(belong_to=self.c)
self.assertEqual(data['projects'], projects.values("id", "name", "comment", "created_at", "results_num"))
self.assertEqual(data['project_num'], 1)

def test_retrieve_project_detail(self):
project_id = Project.objects.first().id
response = self.c.get('/ocr/project/'+project_id, {}, {'content_type': "application/json"})
data = json.loads(response.content.decode())
project = Project.objects.first()
result = RecognitionResult(name='testresult', comment='resultcomment', belong_to=project)
result.save()
results = result.belong_to.recognitionresult_set.all()

self.assertEqual(data['name'], project.name)
self.assertEqual(data['comment'], project.comment)
self.assertEqual(data['created_at'], project.created_at)
self.assertEqual(data['result_num'], project.recognitionresult_set.count())
self.assertEqual(data['results'], results.values("id", "name", "comment", "created_at"))

def test_remove_project(self):
project_id = Project.objects.first().id
self.c.delete('/ocr/project/' + project_id, {}, {'content_type': "application/json"})
self.assertEqual(Project.objects.count(), 0)
60 changes: 60 additions & 0 deletions ocr/tests/test_result.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.test import Client
import json
import os
from ocr.models.project import Project
from ocr.models.recognition_result import RecognitionResult

class ProjectTestCase(TestCase):
def setUp(self):
self.c = Client()
self.UserModel = get_user_model()

def test_receieve_ocr_photo(self):
self.c.post('/auth/create', {'username':'testuser2', 'password':'password', 'email':'email'}, {'content_type':"application/json"})
response = self.c.post('/auth/', {'username':'testuser2', 'password':'password'}, {'content_type':"application/json"})
access_token = json.loads(response.content.decode())['access_token']
self.c.defaults['HTTP_AUTHORIZATION'] = 'Bearer ' + access_token
self.c.post('/ocr/project', {'name': 'project1', 'comment': 'comment1'},
{'content_type':"application/json"})
data = json.loads(response.content.decode())
project_id = data['id']
project = Project.objects.filter(id=project_id)

file = 'form.png'
payload = {'name': 'result1', 'comment': 'resultcomment1'}
files = {
"json": (None, json.dumps(payload), "application/json"),
"file": (os.path.basename(file), open(file, "rb"), "image/png")
}
response = self.c.post('/ocr/project/'+project_id, files=files)
data = json.loads(response.content.decode())
result = project.recognitionresult_set.filter(id=data['id'])
self.assertEqual(result.name, 'result1')
self.assertEqual(result.comment, 'resultcomment1')

def test_retrieve_ocr_result(self):
project = Project.objects.filter(belong_to=self.c).first()
result = project.recognitionresult_set.all().first()
response = self.c.get('/ocr/project/'+project.id+'/'+result.id, {}, {'content_type': "application/json"})
data = json.loads(response.content.decode())
self.assertEqual(data['id'], result.id)
self.assertEqual(data['name'], result.name)
self.assertEqual(data['comment'], result.comment)
self.assertEqual(data['result'], result.result)

def test_update_ocr_result(self):
project = Project.objects.filter(belong_to=self.c).first()
result = project.recognitionresult_set.all().first()
self.c.put('/ocr/project/'+project.id+'/'+result.id, {'name': 'result2', 'comment': 'resultcomment2'},
{'content_type': "application/json"})
result = RecognitionResult.objects.filter(id=result.id)
self.assertEqual(result.name, 'result2')
self.assertEqual(result.comment, 'resultcomment2')

def test_remove_ocr_result(self):
project = Project.objects.filter(belong_to=self.c).first()
result = project.recognitionresult_set.all().first()
self.c.delete('/ocr/project/'+project.id+'/'+result.id, {}, {'content_type': "application/json"})
self.assertEqual(RecognitionResult.objects.count(), 0)
1 change: 1 addition & 0 deletions user_manager/api/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ def verify_jwt_token(request: HttpRequest) -> (bool, StatusCode, str, int):
status: StatusCode = StatusCode.SUCCESS
header: str = request.META.get("HTTP_AUTHORIZATION")
try:
print(header)
if header is None:
raise jwt.InvalidTokenError

Expand Down
1 change: 1 addition & 0 deletions user_manager/api/user_management.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def create_user(request: HttpRequest):

[method]: POST
"""
print(request)
user_info: dict = parse_data(request)
if not user_info:
return failed_api_response(StatusCode.BAD_REQUEST, "Bad request")
Expand Down