From 5a336183fc1fcd22fa0be008c4fed5b0a7eac29a Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Wed, 3 Feb 2021 13:23:21 +0300 Subject: [PATCH 1/4] Add sqlalchemy ORM and change function in view.py for the database --- ORM.py | 37 +++++++++++++++++++++++++++ routes.py | 19 ++++++-------- viewsORM.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 11 deletions(-) create mode 100644 ORM.py create mode 100644 viewsORM.py diff --git a/ORM.py b/ORM.py new file mode 100644 index 0000000..534ee67 --- /dev/null +++ b/ORM.py @@ -0,0 +1,37 @@ +from sqlalchemy.orm import sessionmaker +from sqlalchemy.ext.declarative import declarative_base +import sqlalchemy as sql + +Base = declarative_base() + + +def opendb(): + engine = sql.create_engine('sqlite:///studentsoncourse.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + return Session() + + +class Students(Base): + __tablename__ = 'students' + + id = sql.Column(sql.Integer, primary_key=True) + name = sql.Column(sql.String) + surname = sql.Column(sql.String) + + +# Help lines +''' +%He +session = opendb() +session.add_all([ + Students(name='11', surname='111'), + Students(name='22', surname='222'), + Students(name='333', surname='333'), +]) +session.commit() + +session = opendb() +a = session.query(Students).filter_by(id=3) +for i in a: + print(i.name)''' diff --git a/routes.py b/routes.py index 764a739..7f6b5d6 100644 --- a/routes.py +++ b/routes.py @@ -1,14 +1,11 @@ from aiohttp import web -from views import homepagehandler, gethandler, getidhandler,\ - putidhandler, postidhandler, deleteidhandler - +from viewsORM 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/viewsORM.py b/viewsORM.py new file mode 100644 index 0000000..e8fd1cf --- /dev/null +++ b/viewsORM.py @@ -0,0 +1,73 @@ +from aiohttp import web +import asyncio +from ORM import Students, opendb + + +def to_json(studobject): + a = ['id', 'name', 'surname'] + userdict = list() + userdict.append(studobject.id) + userdict.append(studobject.name) + userdict.append(studobject.surname) + data = dict(zip(a, userdict)) + return data + + +async def postinfo(request): + data = await request.post() + name = data['name'] + surname = data['surname'] + return name, surname + + +def gethandler(request): + session = opendb() + data = list() + for user in session.query(Students).all(): + data.append(to_json(user)) + session.close() + return web.json_response(data) + + +def getidhandler(request): + session = opendb() + user = session.query(Students).filter_by(id=request.match_info['id']).one_or_none() + if user is not None: + data = [to_json(user)] + session.close() + return web.json_response(data) + + +async def postidhandler(request): + session = opendb() + user = session.query(Students).filter_by(id=request.match_info['id']).one_or_none() + if user is not None: + return web.Response(status=409, text='user with this id exists') + data = await postinfo(request) + newstud = Students(id=request.match_info['id'], name=data[0], surname=data[1]) + session.add(newstud) + session.commit() + session.close() + return getidhandler(request) + + +def deleteidhandler(request): + statuscode = 0 + session = opendb() + user = session.query(Students).filter_by(id=request.match_info['id']).one_or_none() + if user != None: + session.delete(user) + statuscode = 204 + session.commit() + session.close() + return web.Response(status=statuscode) + + +async def putidhandler(request): + id = request.match_info['id'] + session = opendb() + user = session.query(Students).filter_by(id=id).one_or_none() + session.close() + if user is not None: + deleteidhandler(request) + return await postidhandler(request) From 3f0b9227b98ef3043d93d7e215033c115606bd6a Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Thu, 4 Feb 2021 12:24:07 +0300 Subject: [PATCH 2/4] Add unittest for ORM --- ORM.py | 8 ++-- test_1ORM.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ viewsORM.py | 1 + 3 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 test_1ORM.py diff --git a/ORM.py b/ORM.py index 534ee67..2bf3970 100644 --- a/ORM.py +++ b/ORM.py @@ -21,9 +21,8 @@ class Students(Base): # Help lines -''' -%He -session = opendb() + +'''session = opendb() session.add_all([ Students(name='11', surname='111'), Students(name='22', surname='222'), @@ -34,4 +33,5 @@ class Students(Base): session = opendb() a = session.query(Students).filter_by(id=3) for i in a: - print(i.name)''' + print(i.name) +session.close()''' diff --git a/test_1ORM.py b/test_1ORM.py new file mode 100644 index 0000000..ddbf268 --- /dev/null +++ b/test_1ORM.py @@ -0,0 +1,103 @@ +from aiohttp import web +from routes import setup_routes +import viewsORM +from os import rename, remove,path +from ORM import opendb, Students + + +def help_open(): + testData = [Students(id=1, name='name1', surname='surname1'), + Students(id=2, name='name2', surname='surname2'), + Students(id=3, name='name3', surname='surname3')] + if path.isfile('studentsoncourse.db'): + rename('studentsoncourse.db', 'studentsoncourseConst.db') + session = opendb() + session.add_all(testData) + session.commit() + session.close() + app = web.Application() + setup_routes(app) + return app + + +def help_close(): + remove('studentsoncourse.db') + if path.isfile('studentsoncourseConst.db'): + rename('studentsoncourseConst.db', 'studentsoncourse.db') + + +async def test_to_json(): + st = Students(id=1, name='name1', surname='surname1') + assert viewsORM.to_json(st) == dict(id=1, name='name1', surname='surname1') + + +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/viewsORM.py b/viewsORM.py index e8fd1cf..b78ec9b 100644 --- a/viewsORM.py +++ b/viewsORM.py @@ -42,6 +42,7 @@ async def postidhandler(request): session = opendb() user = session.query(Students).filter_by(id=request.match_info['id']).one_or_none() if user is not None: + session.close() return web.Response(status=409, text='user with this id exists') data = await postinfo(request) newstud = Students(id=request.match_info['id'], name=data[0], surname=data[1]) From 736e082f804661c635f9c9b7fb74f90398956f03 Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Wed, 10 Feb 2021 12:53:46 +0300 Subject: [PATCH 3/4] Add structure --- HTTPcommands.txt | 2 -- aiohttpproject/__init__.py | 0 routes.py => aiohttpproject/urls.py | 2 +- customers/__init__.py | 0 ORM.py => customers/models.py | 0 test_1ORM.py => customers/test_1ORM.py | 10 +++++----- views.py => customers/views.py | 5 +++-- viewsORM.py => customers/viewsORM.py | 3 +-- main.py | 9 +++++---- website/index.html | 6 ------ 10 files changed, 15 insertions(+), 22 deletions(-) delete mode 100644 HTTPcommands.txt create mode 100644 aiohttpproject/__init__.py rename routes.py => aiohttpproject/urls.py (78%) create mode 100644 customers/__init__.py rename ORM.py => customers/models.py (100%) rename test_1ORM.py => customers/test_1ORM.py (93%) rename views.py => customers/views.py (97%) rename viewsORM.py => customers/viewsORM.py (97%) delete mode 100644 website/index.html diff --git a/HTTPcommands.txt b/HTTPcommands.txt deleted file mode 100644 index 68ed29e..0000000 --- a/HTTPcommands.txt +++ /dev/null @@ -1,2 +0,0 @@ -curl -X POST -d 'param1=value1¶m2=value2' http://0.0.0.0:8080/students/{id} -curl -X DELETE http://0.0.0.0:8080/students/{id} diff --git a/aiohttpproject/__init__.py b/aiohttpproject/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/routes.py b/aiohttpproject/urls.py similarity index 78% rename from routes.py rename to aiohttpproject/urls.py index 7f6b5d6..8f6a770 100644 --- a/routes.py +++ b/aiohttpproject/urls.py @@ -1,5 +1,5 @@ from aiohttp import web -from viewsORM import gethandler,getidhandler,putidhandler,postidhandler,deleteidhandler +from customers.viewsORM import gethandler,getidhandler,putidhandler,postidhandler,deleteidhandler def setup_routes(app): app.add_routes([ diff --git a/customers/__init__.py b/customers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ORM.py b/customers/models.py similarity index 100% rename from ORM.py rename to customers/models.py diff --git a/test_1ORM.py b/customers/test_1ORM.py similarity index 93% rename from test_1ORM.py rename to customers/test_1ORM.py index ddbf268..581cd88 100644 --- a/test_1ORM.py +++ b/customers/test_1ORM.py @@ -1,8 +1,8 @@ from aiohttp import web -from routes import setup_routes -import viewsORM -from os import rename, remove,path -from ORM import opendb, Students +from aiohttpproject.urls import setup_routes +from customers import viewsORM +from os import rename, remove, path +from customers.models import opendb, Students def help_open(): @@ -23,7 +23,7 @@ def help_open(): def help_close(): remove('studentsoncourse.db') if path.isfile('studentsoncourseConst.db'): - rename('studentsoncourseConst.db', 'studentsoncourse.db') + rename('studentsoncourseConst.db', '../studentsoncourse.db') async def test_to_json(): diff --git a/views.py b/customers/views.py similarity index 97% rename from views.py rename to customers/views.py index cdfb558..60d64e7 100644 --- a/views.py +++ b/customers/views.py @@ -54,7 +54,7 @@ async def postidhandler(request): def deleteidhandler(request): - a = '' + a='' with open('DataBase.txt') as dbfile: for user in dbfile: if user[0] == request.match_info['id']: @@ -65,8 +65,9 @@ def deleteidhandler(request): return + async def putidhandler(request): - id = request.match_info['id'] + id=request.match_info['id'] with open('DataBase.txt') as dbfile: for user in dbfile: if user.split()[0] == id: diff --git a/viewsORM.py b/customers/viewsORM.py similarity index 97% rename from viewsORM.py rename to customers/viewsORM.py index b78ec9b..0044e8f 100644 --- a/viewsORM.py +++ b/customers/viewsORM.py @@ -1,6 +1,5 @@ from aiohttp import web -import asyncio -from ORM import Students, opendb +from customers.models import Students, opendb def to_json(studobject): diff --git a/main.py b/main.py index ab1227e..e6bbf9e 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,7 @@ from aiohttp import web -from routes import setup_routes +from aiohttpproject.urls import setup_routes -app = web.Application() -setup_routes(app) -web.run_app(app, host='127.0.0.1') +if __name__ == '__main__': + app = web.Application() + setup_routes(app) + web.run_app(app,host='127.0.0.1') diff --git a/website/index.html b/website/index.html deleted file mode 100644 index 4dac017..0000000 --- a/website/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - -Quality -

Frontend от разработчика Артема

- From 76540cfd78f62bcea76c015cdbdde74e18bb1362 Mon Sep 17 00:00:00 2001 From: Raskolnikofff Date: Wed, 10 Feb 2021 17:57:02 +0300 Subject: [PATCH 4/4] Add fictures.py and small change --- aiohttpproject/urls.py | 17 ++++--- customers/fictures.py | 51 ++++++++++++++++++++ customers/models.py | 25 ---------- customers/{test_1ORM.py => test_viewsORM.py} | 8 +-- customers/views.py | 30 +++--------- customers/viewsORM.py | 27 +++-------- main.py | 2 +- setup.cfg | 2 + 8 files changed, 79 insertions(+), 83 deletions(-) create mode 100644 customers/fictures.py rename customers/{test_1ORM.py => test_viewsORM.py} (93%) create mode 100644 setup.cfg diff --git a/aiohttpproject/urls.py b/aiohttpproject/urls.py index 8f6a770..f6224eb 100644 --- a/aiohttpproject/urls.py +++ b/aiohttpproject/urls.py @@ -1,11 +1,12 @@ from aiohttp import web -from customers.viewsORM import gethandler,getidhandler,putidhandler,postidhandler,deleteidhandler +from customers.viewsORM import gethandler, getidhandler, putidhandler, postidhandler, deleteidhandler + def setup_routes(app): - 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) - ]) + 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/customers/fictures.py b/customers/fictures.py new file mode 100644 index 0000000..ca32e9d --- /dev/null +++ b/customers/fictures.py @@ -0,0 +1,51 @@ +from customers.models import Base +from sqlalchemy.orm import sessionmaker +import sqlalchemy as sql + + +def to_jsonORM(studobject): + a = ['id', 'name', 'surname'] + userdict = list() + userdict.append(studobject.id) + userdict.append(studobject.name) + userdict.append(studobject.surname) + data = dict(zip(a, userdict)) + return data + + +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 + + +def opendb(): + engine = sql.create_engine('sqlite:///studentsoncourse.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + return Session() + + +# Help lines + +'''session = opendb() +session.add_all([ + Students(name='11', surname='111'), + Students(name='22', surname='222'), + Students(name='333', surname='333'), +]) +session.commit() + +session = opendb() +a = session.query(Students).filter_by(id=3) +for i in a: + print(i.name) +session.close()''' diff --git a/customers/models.py b/customers/models.py index 2bf3970..41c951b 100644 --- a/customers/models.py +++ b/customers/models.py @@ -1,37 +1,12 @@ -from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base import sqlalchemy as sql Base = declarative_base() -def opendb(): - engine = sql.create_engine('sqlite:///studentsoncourse.db') - Base.metadata.create_all(engine) - Session = sessionmaker(bind=engine) - return Session() - - class Students(Base): __tablename__ = 'students' id = sql.Column(sql.Integer, primary_key=True) name = sql.Column(sql.String) surname = sql.Column(sql.String) - - -# Help lines - -'''session = opendb() -session.add_all([ - Students(name='11', surname='111'), - Students(name='22', surname='222'), - Students(name='333', surname='333'), -]) -session.commit() - -session = opendb() -a = session.query(Students).filter_by(id=3) -for i in a: - print(i.name) -session.close()''' diff --git a/customers/test_1ORM.py b/customers/test_viewsORM.py similarity index 93% rename from customers/test_1ORM.py rename to customers/test_viewsORM.py index 581cd88..3e5a2fb 100644 --- a/customers/test_1ORM.py +++ b/customers/test_viewsORM.py @@ -1,8 +1,8 @@ from aiohttp import web from aiohttpproject.urls import setup_routes -from customers import viewsORM from os import rename, remove, path -from customers.models import opendb, Students +from customers.models import Students +from customers.fictures import opendb, to_jsonORM def help_open(): @@ -23,12 +23,12 @@ def help_open(): def help_close(): remove('studentsoncourse.db') if path.isfile('studentsoncourseConst.db'): - rename('studentsoncourseConst.db', '../studentsoncourse.db') + rename('studentsoncourseConst.db', 'studentsoncourse.db') async def test_to_json(): st = Students(id=1, name='name1', surname='surname1') - assert viewsORM.to_json(st) == dict(id=1, name='name1', surname='surname1') + assert to_jsonORM(st) == dict(id=1, name='name1', surname='surname1') async def test_postinfo(): diff --git a/customers/views.py b/customers/views.py index 60d64e7..bbcaea8 100644 --- a/customers/views.py +++ b/customers/views.py @@ -1,22 +1,5 @@ from aiohttp import web - - -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 - - -def homepagehandler(request): - return web.FileResponse('website/index.html') +from customers.fictures import to_json, postinfo def gethandler(request): @@ -42,9 +25,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] @@ -54,7 +37,7 @@ async def postidhandler(request): def deleteidhandler(request): - a='' + a = '' with open('DataBase.txt') as dbfile: for user in dbfile: if user[0] == request.match_info['id']: @@ -65,9 +48,8 @@ def deleteidhandler(request): return - async def putidhandler(request): - id=request.match_info['id'] + id = request.match_info['id'] with open('DataBase.txt') as dbfile: for user in dbfile: if user.split()[0] == id: diff --git a/customers/viewsORM.py b/customers/viewsORM.py index 0044e8f..784041b 100644 --- a/customers/viewsORM.py +++ b/customers/viewsORM.py @@ -1,29 +1,14 @@ from aiohttp import web -from customers.models import Students, opendb - - -def to_json(studobject): - a = ['id', 'name', 'surname'] - userdict = list() - userdict.append(studobject.id) - userdict.append(studobject.name) - userdict.append(studobject.surname) - data = dict(zip(a, userdict)) - return data - - -async def postinfo(request): - data = await request.post() - name = data['name'] - surname = data['surname'] - return name, surname +from customers.models import Students +from customers.fictures import opendb +from customers.fictures import to_jsonORM, postinfo def gethandler(request): session = opendb() data = list() for user in session.query(Students).all(): - data.append(to_json(user)) + data.append(to_jsonORM(user)) session.close() return web.json_response(data) @@ -32,7 +17,7 @@ def getidhandler(request): session = opendb() user = session.query(Students).filter_by(id=request.match_info['id']).one_or_none() if user is not None: - data = [to_json(user)] + data = [to_jsonORM(user)] session.close() return web.json_response(data) @@ -55,7 +40,7 @@ def deleteidhandler(request): statuscode = 0 session = opendb() user = session.query(Students).filter_by(id=request.match_info['id']).one_or_none() - if user != None: + if user is not None: session.delete(user) statuscode = 204 session.commit() diff --git a/main.py b/main.py index e6bbf9e..f73df02 100644 --- a/main.py +++ b/main.py @@ -4,4 +4,4 @@ if __name__ == '__main__': 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/setup.cfg b/setup.cfg new file mode 100644 index 0000000..79a16af --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 120 \ No newline at end of file