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
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,5 @@ ENV/

# Sphinx documentation
docs/_build/


.vscode/
.vscode/
.idea/
Empty file removed api/api.py
Empty file.
83 changes: 83 additions & 0 deletions api/handler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!/usr/bin/env python3

import ujson
from aiohttp.web import Response
from mongo import client as m_client
import logging


async def add_user(request):
logging.info('READING THE DATA...')
# user_id_insert_request
user_data = await request.json()
user_id = user_data.get("_id")
# check if _id already exists
check_id = await m_client.do_find_one(user_id)
if not check_id:
logging.info('ADDING RECORDS...')
inserted_data = await m_client.do_insert(user_data)
logging.info('INSERTED DATA...')
# find the inserted_data
find_data = await m_client.do_find_one(inserted_data)
logging.debug('RECORDS: %s', find_data)
return Response(text=ujson.dumps(find_data), status=200)
logging.error('_ID ALREADY EXISTS...')
return Response(text='_id already exists !')


async def get_user(request):
logging.info('READING THE _id...')
# user_id_find_request
user_id = request.match_info.get('user_id')

# to get all documents in the collection
if user_id == '0':
data = await m_client.do_find_all()
logging.info(data)
return Response(text=ujson.dumps(data, indent=1), status=200)
# to get mentioned _id
else:
# check if _id exists
user_data = await m_client.do_find_one(user_id)
if not user_data:
logging.error('INVALID _id %s!', user_id)
return Response(text='Invalid _id !')
logging.debug('RECORDS: %s', user_data)
return Response(text=ujson.dumps(user_data), status=200)


async def delete_user(request):
logging.info('READING THE _id...')
# user_id_delete_request
user_id = request.match_info.get('user_id')
# check if _id exists
user_data = await m_client.do_find_one(user_id)
if not user_data:
logging.error('INVALID _id %s!', user_id)
return Response(text='Invalid _id !')
await m_client.do_del(user_data)
logging.info('DATA DELETED...')
return Response(text='Deleted !', status=200)


async def update_user(request):
logging.info('READING THE _id...')
# user_id_update_request
user_id = request.match_info.get('user_id')
user_data = await request.json()
data = dict(user_data)
# check if _id exists
doc = await m_client.do_find_one(user_id)
if not doc:
logging.error('INVALID _id %s!', user_id)
return Response(text='Invalid _id !')
await m_client.do_update(user_id, data)
logging.info('DATA UPDATED...')
return Response(text='Updated !', status=200)


"""
async def count_user(request):
d = await m_client.do_count()
return Response(text=json.dumps(d), status=200)
"""
27 changes: 27 additions & 0 deletions app.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"simple": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"date_fmt": "%m-%d-%Y %H:%M:%S"
}
},
"handlers": {
"SysLog": {
"class": "logging.handlers.SysLogHandler",
"formatter": "simple",
"address": "/var/run/syslog",
"level": "DEBUG",
"facility": "LOG_SYSLOG"
}
},
"loggers": {
"handlers": ["SysLog"],
"level": "DEBUG",
"propagate": false
}
}



33 changes: 33 additions & 0 deletions logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env python3

import json
import logging.config
from logging.handlers import SysLogHandler


class MyLogger:

@staticmethod
def setup(logger_name: str=None):

# loading_data_from_json_file
with open("app.json", "r", encoding="utf-8") as fd:
data = json.load(fd)

# LOG_SYSLOG
syslog_loaded = data["handlers"]["SysLog"]
syslog_address = syslog_loaded["address"]
syslog_level = syslog_loaded["level"]
formatter = logging.Formatter(fmt=data["formatters"]["simple"]["format"],
datefmt=data["formatters"]["simple"]["date_fmt"])
propagate = data["loggers"]["propagate"]

# accessing_the_loaded_json_file_SYSLOG
logger = logging.getLogger(logger_name)
handler = SysLogHandler(address=syslog_address)
handler.setFormatter(formatter)
logger.setLevel(syslog_level)
logger.propagate = propagate
logger.addHandler(handler)

# called in server.py
39 changes: 39 additions & 0 deletions mongo/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env python3

import motor
from motor.motor_asyncio import AsyncIOMotorClient
m_client = motor.motor_asyncio.AsyncIOMotorClient()

db = m_client.m1
collection = db.m1c


async def do_insert(user_data):
document = await collection.insert(user_data)
return document


async def do_find_one(user_id):
document = await collection.find_one(user_id)
return document


async def do_del(user_id):
await collection.delete_one(user_id)


async def do_update(user_id, user_data):
await collection.update({"_id": user_id}, {'$set': user_data})


async def do_find_all():
doc = collection.find()
return doc


"""
async def do_count():
cnt = await collection.find().count()
print('%s Count of documents ' % cnt)
return cnt
"""
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
ujson

motor==1.2.1

aiohttp==3.1.3
24 changes: 22 additions & 2 deletions server.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
#!/usr/bin/env python3

from aiohttp import web
from api import handler
from logger import MyLogger


def run():
""" Starts the Server
"""
""" Starts the Server """

app = web.Application()
MyLogger().setup()

app.router.add_get('/api/user/{user_id}', handler.get_user)
app.router.add_post('/api/user', handler.add_user)
app.router.add_put('/api/user/{user_id}', handler.update_user)
app.router.add_delete('/api/user/{user_id}', handler.delete_user)

web.run_app(app)


run()



Empty file removed tests/.gitkeep
Empty file.
12 changes: 12 additions & 0 deletions tests/test_handler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# GET all users
# curl -X GET http://<IP>:<PORT>/api/user

# GET user with matching <id>
# curl -X GET http://<IP>:<PORT>/api/user/<id>

# CREATE user
# curl -X POST http://<IP>:<PORT>/api/user -d {<data for user>}

# curl -X DELETE http://<IP>:<PORT>/api/user/<id>
#
# curl -X PUT http://<IP>:<PORT>/api/user/<id> -d {<data for user>}