From 45f613786a5baefcac2ff631cd8aea6dc274b18e Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Fri, 15 Jan 2021 13:27:23 +0300 Subject: [PATCH 1/4] Add linter flake8 --- .pre-commit-config.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..f573d87 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,5 @@ +repos: +- repo: https://gitlab.com/pycqa/flake8 + rev: '' # pick a git hash / tag to point to + hooks: + - id: flake8 From ff20195945a89d3e4fd3bc2351621c74ee1d529d Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Thu, 28 Jan 2021 09:08:22 +0300 Subject: [PATCH 2/4] Add file reformatting according to flake8 --- main.py | 3 +-- routes.py | 20 ++++++++++--------- views.py | 60 +++++++++++++++++++++++++++++++------------------------ 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/main.py b/main.py index e4a9875..ab1227e 100644 --- a/main.py +++ b/main.py @@ -3,5 +3,4 @@ app = web.Application() setup_routes(app) -web.run_app(app,host='127.0.0.1') - +web.run_app(app, host='127.0.0.1') diff --git a/routes.py b/routes.py index 57addcd..764a739 100644 --- a/routes.py +++ b/routes.py @@ -1,12 +1,14 @@ from aiohttp import web -from views import homepagehandler,gethandler,getidhandler,putidhandler,postidhandler,deleteidhandler +from views import homepagehandler, gethandler, getidhandler,\ + putidhandler, postidhandler, deleteidhandler + def setup_routes(app): - app.add_routes([ - web.get('/',homepagehandler), - web.get('/students',gethandler), - web.get('/students/{id}',getidhandler), - web.put('/students/{id}',putidhandler), - web.post('/students/{id}',postidhandler), - web.delete('/students/{id}',deleteidhandler) - ]) + app.add_routes([ + web.get('/', homepagehandler), + web.get('/students', gethandler), + web.get('/students/{id}', getidhandler), + web.put('/students/{id}', putidhandler), + web.post('/students/{id}', postidhandler), + web.delete('/students/{id}', deleteidhandler) + ]) diff --git a/views.py b/views.py index d8afb20..cdfb558 100644 --- a/views.py +++ b/views.py @@ -1,22 +1,24 @@ from aiohttp import web -import asyncio def to_json(string): - a=['id','name','surname'] - string=string.split() - data=dict(zip(a,string)) + a = ['id', 'name', 'surname'] + string = string.split() + data = dict(zip(a, string)) return (data) + async def postinfo(request): - data = await request.post() - name=data['name'] - surname=data['surname'] - return name,surname + data = await request.post() + name = data['name'] + surname = data['surname'] + return name, surname + def homepagehandler(request): return web.FileResponse('website/index.html') + def gethandler(request): with open('DataBase.txt') as dbfile: data = list() @@ -24,43 +26,49 @@ def gethandler(request): data.append(to_json(user)) return web.json_response(data) + def getidhandler(request): with open('DataBase.txt') as dbfile: for user in dbfile: - data=to_json(user) - if user.split()[0]==request.match_info['id']: + data = to_json(user) + if user.split()[0] == request.match_info['id']: return web.json_response(data) + async def postidhandler(request): - a='' + a = '' with open('DataBase.txt') as dbfile: for user in dbfile: - a+=user - if user.split()[0]==request.match_info['id']: - return web.Response(status=409,text='user with this id exists') - with open('DataBase.txt','w') as dbfilewr: - data=await postinfo(request) - newstud=request.match_info['id']+' '+data[0]+' '+data[1] - print(a+newstud,file=dbfilewr) + a += user + if user.split()[0] == request.match_info['id']: + return web.Response( + status=409, + text='user with this id exists' + ) + with open('DataBase.txt', 'w') as dbfilewr: + data = await postinfo(request) + newstud = request.match_info['id'] + ' ' + data[0] + ' ' + data[1] + print(a + newstud, file=dbfilewr) with open('DataBase.txt') as dbfile: return web.json_response(to_json(dbfile.readlines()[-1])) + def deleteidhandler(request): - a='' + a = '' with open('DataBase.txt') as dbfile: for user in dbfile: if user[0] == request.match_info['id']: with open('DataBase.txt', 'w') as dbfilewr: - b=dbfile.read() - print((a+b)[:-1],file=dbfilewr) - a+=user - return + b = dbfile.read() + print((a + b)[:-1], file=dbfilewr) + a += user + return + async def putidhandler(request): - id=request.match_info['id'] - info=await postinfo(request) + id = request.match_info['id'] with open('DataBase.txt') as dbfile: for user in dbfile: - if user.split()[0]==id: + if user.split()[0] == id: deleteidhandler(request) return await postidhandler(request) From 831aea11dce22c68f61b7a98a9b42bddf4496699 Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Thu, 28 Jan 2021 16:40:41 +0300 Subject: [PATCH 3/4] Add unittest --- test_1.py | 25 +++++++++++++++++++++++++ views.py | 20 ++++++++++---------- 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 test_1.py diff --git a/test_1.py b/test_1.py new file mode 100644 index 0000000..32ada2e --- /dev/null +++ b/test_1.py @@ -0,0 +1,25 @@ +from aiohttp import web +from routes import setup_routes +import views + + +async def test_homepagehandler(aiohttp_client, loop): + app = web.Application() + setup_routes(app) + client = await aiohttp_client(app) + resp = await client.get('/students/2') + assert resp.status == 200 + text = await resp.text() + assert '{"id": "2", "name": "value1", "surname": "value2"}' == text + + +async def test_deleteidhandler(aiohttp_client, loop): + app = web.Application() + setup_routes(app) + client = await aiohttp_client(app) + resp = await client.delete('/students/2') + assert resp.status == 200 + + +async def test_to_json(): + assert await views.to_json('1 2 3') == dict(id='1', name='2', surname='3') diff --git a/views.py b/views.py index cdfb558..e2fa4f3 100644 --- a/views.py +++ b/views.py @@ -1,11 +1,11 @@ from aiohttp import web -def to_json(string): +async def to_json(string): a = ['id', 'name', 'surname'] string = string.split() data = dict(zip(a, string)) - return (data) + return data async def postinfo(request): @@ -15,22 +15,22 @@ async def postinfo(request): return name, surname -def homepagehandler(request): +async def homepagehandler(request): return web.FileResponse('website/index.html') -def gethandler(request): +async def gethandler(request): with open('DataBase.txt') as dbfile: data = list() for user in dbfile: - data.append(to_json(user)) + data.append(await to_json(user)) return web.json_response(data) -def getidhandler(request): +async def getidhandler(request): with open('DataBase.txt') as dbfile: for user in dbfile: - data = to_json(user) + data = await to_json(user) if user.split()[0] == request.match_info['id']: return web.json_response(data) @@ -50,10 +50,10 @@ async def postidhandler(request): newstud = request.match_info['id'] + ' ' + data[0] + ' ' + data[1] print(a + newstud, file=dbfilewr) with open('DataBase.txt') as dbfile: - return web.json_response(to_json(dbfile.readlines()[-1])) + return web.json_response(await to_json(dbfile.readlines()[-1])) -def deleteidhandler(request): +async def deleteidhandler(request): a = '' with open('DataBase.txt') as dbfile: for user in dbfile: @@ -70,5 +70,5 @@ async def putidhandler(request): with open('DataBase.txt') as dbfile: for user in dbfile: if user.split()[0] == id: - deleteidhandler(request) + await deleteidhandler(request) return await postidhandler(request) From f6deac2e3a46f2dd13782063ed9898a561f1e776 Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Fri, 29 Jan 2021 14:05:33 +0300 Subject: [PATCH 4/4] Add test coverage of all functions --- routes.py | 3 +- test_1.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++----- views.py | 13 ++++---- 3 files changed, 86 insertions(+), 18 deletions(-) diff --git a/routes.py b/routes.py index 764a739..f9860d8 100644 --- a/routes.py +++ b/routes.py @@ -1,11 +1,10 @@ from aiohttp import web -from views import homepagehandler, gethandler, getidhandler,\ +from views import gethandler, getidhandler, \ putidhandler, postidhandler, deleteidhandler def setup_routes(app): app.add_routes([ - web.get('/', homepagehandler), web.get('/students', gethandler), web.get('/students/{id}', getidhandler), web.put('/students/{id}', putidhandler), diff --git a/test_1.py b/test_1.py index 32ada2e..2866f52 100644 --- a/test_1.py +++ b/test_1.py @@ -1,25 +1,97 @@ from aiohttp import web from routes import setup_routes import views +from os import rename, remove -async def test_homepagehandler(aiohttp_client, loop): +def help_open(): + rename('DataBase.txt', 'DataBaseConst.txt') + with open("DataBase.txt", 'w') as f: + testData = ['1 name1 surname1\n', + '2 name2 surname2\n', + '3 name3 surname3'] + print(*testData, file=f, sep='') app = web.Application() setup_routes(app) + return app + + +def help_close(): + remove('DataBase.txt') + rename('DataBaseConst.txt', 'DataBase.txt') + + +async def test_to_json(): + assert await views.to_json('1 2 3') == dict(id='1', name='2', surname='3') + + +async def test_postinfo(): + pass + + +async def test_gethandler(aiohttp_client): + app = help_open() + client = await aiohttp_client(app) + resp = await client.get('/students') + help_close() + assert resp.status == 200 + text = await resp.text() + testtext1 = '[{"id": "1", "name": "name1", "surname": "surname1"}, ' + testtext2 = '{"id": "2", "name": "name2", "surname": "surname2"}, ' + testtext3 = '{"id": "3", "name": "name3", "surname": "surname3"}]' + testtext = testtext1 + testtext2 + testtext3 + assert testtext == text + + +async def test_getidhandler(aiohttp_client): + app = help_open() client = await aiohttp_client(app) resp = await client.get('/students/2') + help_close() assert resp.status == 200 text = await resp.text() - assert '{"id": "2", "name": "value1", "surname": "value2"}' == text + assert '{"id": "2", "name": "name2", "surname": "surname2"}' == text -async def test_deleteidhandler(aiohttp_client, loop): - app = web.Application() - setup_routes(app) +async def test_postidhandler(aiohttp_client): + params = {'name': 'name4', 'surname': 'surname4'} + app = help_open() + client = await aiohttp_client(app) + resp = await client.post('/students/2', data=params) + help_close() + assert resp.status == 409 + text = await resp.text() + assert 'user with this id exists' == text + app = help_open() client = await aiohttp_client(app) - resp = await client.delete('/students/2') + resp = await client.post('/students/4', data=params) + help_close() assert resp.status == 200 + text = await resp.text() + assert '{"id": "4", "name": "name4", "surname": "surname4"}' == text -async def test_to_json(): - assert await views.to_json('1 2 3') == dict(id='1', name='2', surname='3') +async def test_deleteidhandler(aiohttp_client): + app = help_open() + client = await aiohttp_client(app) + resp = await client.delete('/students/3') + help_close() + assert resp.status == 204 + + +async def test_putidhandler(aiohttp_client): + params = {'name': 'name5', 'surname': 'surname5'} + app = help_open() + client = await aiohttp_client(app) + resp = await client.put('/students/5', data=params) + help_close() + assert resp.status == 200 + text = await resp.text() + assert '{"id": "5", "name": "name5", "surname": "surname5"}' == text + app = help_open() + client = await aiohttp_client(app) + resp = await client.post('/students/4', data=params) + help_close() + assert resp.status == 200 + text = await resp.text() + assert '{"id": "4", "name": "name5", "surname": "surname5"}' == text diff --git a/views.py b/views.py index e2fa4f3..1141248 100644 --- a/views.py +++ b/views.py @@ -15,10 +15,6 @@ async def postinfo(request): return name, surname -async def homepagehandler(request): - return web.FileResponse('website/index.html') - - async def gethandler(request): with open('DataBase.txt') as dbfile: data = list() @@ -42,9 +38,9 @@ async def postidhandler(request): a += user if user.split()[0] == request.match_info['id']: return web.Response( - status=409, - text='user with this id exists' - ) + status=409, + text='user with this id exists' + ) with open('DataBase.txt', 'w') as dbfilewr: data = await postinfo(request) newstud = request.match_info['id'] + ' ' + data[0] + ' ' + data[1] @@ -53,7 +49,7 @@ async def postidhandler(request): return web.json_response(await to_json(dbfile.readlines()[-1])) -async def deleteidhandler(request): +def deleteidhandler(request): a = '' with open('DataBase.txt') as dbfile: for user in dbfile: @@ -61,6 +57,7 @@ async def deleteidhandler(request): with open('DataBase.txt', 'w') as dbfilewr: b = dbfile.read() print((a + b)[:-1], file=dbfilewr) + return web.Response(status=204) a += user return