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 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..f9860d8 100644 --- a/routes.py +++ b/routes.py @@ -1,12 +1,13 @@ from aiohttp import web -from views import homepagehandler,gethandler,getidhandler,putidhandler,postidhandler,deleteidhandler +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), - web.post('/students/{id}',postidhandler), - web.delete('/students/{id}',deleteidhandler) - ]) + app.add_routes([ + 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/test_1.py b/test_1.py new file mode 100644 index 0000000..2866f52 --- /dev/null +++ b/test_1.py @@ -0,0 +1,97 @@ +from aiohttp import web +from routes import setup_routes +import views +from os import rename, remove + + +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": "name2", "surname": "surname2"}' == text + + +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.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_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 d8afb20..1141248 100644 --- a/views.py +++ b/views.py @@ -1,66 +1,71 @@ from aiohttp import web -import asyncio -def to_json(string): - a=['id','name','surname'] - string=string.split() - data=dict(zip(a,string)) - return (data) +async def to_json(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): +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) - if user.split()[0]==request.match_info['id']: + data = await 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])) + return web.json_response(await 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) + return web.Response(status=204) + 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: - deleteidhandler(request) + if user.split()[0] == id: + await deleteidhandler(request) return await postidhandler(request)