Commit c263356d authored by ramya.r's avatar ramya.r

first

parents
DB_URI=sqlite:///./internsb2.db
# Default ignored files
/shelf/
/workspace.xml
main.py
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N806" />
<option value="N801" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="main.employee_details" />
<option value="object.subordinates" />
</list>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="C:\Users\ramya.r\Anaconda3 (2)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/new sqlite.iml" filepath="$PROJECT_DIR$/.idea/new sqlite.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
[service]
port=5432
host=192.168.0.220
database="internsb2"
[sqlite_uri]
db_uri = $DB_URI
\ No newline at end of file
{
"employees": [
{
"id": 1,
"name": "John Doe",
"subordinates": [2, 3, 4]
},
{
"id": 2,
"name": "Jane Smith",
"subordinates": [5, 6]
},
{
"id": 3,
"name": "Bob Johnson",
"subordinates": []
},
{
"id": 4,
"name": "Alice Williams",
"subordinates": [7, 8, 9]
},
{
"id": 5,
"name": "Mike Davis",
"subordinates": []
},
{
"id": 6,
"name": "Sara Wilson",
"subordinates": []
},
{
"id": 7,
"name": "Tom Brown",
"subordinates": []
},
{
"id": 8,
"name": "Emily Green",
"subordinates": []
},
{
"id": 9,
"name": "Sam Lee",
"subordinates": []
},
{
"id": 10,
"name": "Peter Lee",
"subordinates": [11, 12]
},
{
"id": 11,
"name": "Amy Chen",
"subordinates": [13, 14]
},
{
"id": 12,
"name": "Ryan Liu",
"subordinates": [15, 16]
},
{
"id": 13,
"name": "David Li",
"subordinates": []
},
{
"id": 14,
"name": "Jenny Wang",
"subordinates": []
},
{
"id": 15,
"name": "Sophie Lin",
"subordinates": []
},
{
"id": 16,
"name": "Michael Wu",
"subordinates": []
},
{
"id": 17,
"name": "Karen Huang",
"subordinates": [18]
},
{
"id": 18,
"name": "Alex Yang",
"subordinates": [19]
},
{
"id": 19,
"name": "Frank Chen",
"subordinates": []
},
{
"id": 20,
"name": "Eric Wang",
"subordinates": [21, 22]
},
{
"id": 21,
"name": "Elaine Lin",
"subordinates": [23, 24]
},
{
"id": 22,
"name": "Olivia Chen",
"subordinates": [25, 26]
},
{
"id": 23,
"name": "Andrew Liu",
"subordinates": []
},
{
"id": 24,
"name": "Cathy Huang",
"subordinates": []
},
{
"id": 25,
"name": "Jason Wu",
"subordinates": []
},
{
"id": 26,
"name": "Grace Chang",
"subordinates": []}]}
\ No newline at end of file
File added
import uvicorn
from fastapi import FastAPI
from dotenv import load_dotenv
from script.service.userdetails import router
load_dotenv()
app = FastAPI(title="Employees")
app.include_router(router)
if __name__ == "__main__":
uvicorn.run("main:app", host='localhost', port=9000)
import os
from configparser import SafeConfigParser
config = SafeConfigParser()
config.read('conf/application.conf')
class Service:
port = int(config.getint("service", "port"))
host = config.get("service", "host")
db_uri= os.environ.get("DB_URI")
class APIEndpoints:
save = "/save"
employee_base = "/employees"
insert = "/insert"
subordinates= "/subordinates"
find = "/find"
class NameDoesNotExist(Exception):
pass
\ No newline at end of file
import json
import random
import sqlite3
from script.utils.sqlite_utils import Utils
from script.utils.sqlite_connection import create_sqlite_connection
my_data = Utils
with open("employee_details.json") as f:
data = json.load(f)
class Userdetails:
@staticmethod
def create_user():
try:
cities = ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio',
'San Diego', 'Dallas', 'San Jose', 'Austin', 'Jacksonville', 'Fort Worth', 'Columbus',
'San Francisco', 'Charlotte', 'Indianapolis', 'Seattle', 'Denver', 'Washington']
for employee in data["employees"]:
employee["city"] = random.choice(cities)
Utils.create_info(id=employee["id"], name=employee["name"], city=employee["city"])
subordinates = []
for subordinate_id in employee["subordinates"]:
subordinate = next(
(subordinate for subordinate in data["employees"] if subordinate["id"] == subordinate_id), None)
if subordinate is not None:
subordinates.append(subordinate["name"])
subordinate_name = ", ".join(subordinates)
id = employee['id']
user_id = employee['id']
Utils.insert_into_subordinate(id, user_id, employee["subordinates"], subordinate_name)
return {"message": "User info created successfully"}
except Exception as e:
print(e, "Error Detected in inserting")
@staticmethod
def find_data():
try:
conn = create_sqlite_connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM user_info")
columns = cursor.description
header = [{"label": col[0].replace("_", " ").title(), "value": col[0]} for col in columns]
cursor.execute("SELECT * FROM user_info")
rows = cursor.fetchall()
user_info = [{"id": row[0], "name": row[1], "city": row[2]} for row in rows]
cursor.execute("SELECT * FROM subordinates_info")
columns = cursor.description
subordinate_header = [{"label": col[0].replace("_", " ").title(), "value": col[0]} for col in columns]
cursor.execute("SELECT * FROM subordinates_info")
rows = cursor.fetchall()
subordinate_info = [{"id": row[0], "user_id": row[1], "subordinate_ids": row[2], "subordinate_name": row[3]}
for row in rows]
conn.close()
return {"header": header, "body": user_info, "subordinate_header": subordinate_header,
"subordinate_body": subordinate_info}
except Exception as e:
print(e, "Error detected in finding employee data")
from script.utils.sqlite_connection import create_sqlite_connection
class Employee:
@staticmethod
def create_tables():
conn = create_sqlite_connection()
conn.execute("""
CREATE TABLE IF NOT EXISTS user_info (
id INTEGER PRIMARY KEY,
name TEXT,
city TEXT
)
""")
conn.execute("""
CREATE TABLE IF NOT EXISTS subordinates_info (
id INTEGER PRIMARY KEY AUTOINCREMENT ,
user_id INTEGER,
subordinate_ids STRING NULL,
subordinate_name TEXT NOT NULL,
FOREIGN KEY(user_id) REFERENCES user_info(id)
)
""")
from typing import Any, Optional
from pydantic import BaseModel
class DefaultResponse(BaseModel):
status: str = "failed"
message: str
data: Optional[Any]
import logging
from fastapi import APIRouter
from script.constants import APIEndpoints
from script.core.handlers.sqlite import Userdetails
from script.core.schema.response import DefaultResponse
user_details = Userdetails()
router = APIRouter(prefix=APIEndpoints.employee_base)
handler = Userdetails()
@router.post(APIEndpoints.insert)
def insert_item():
try:
handler.create_user()
return DefaultResponse(message="Successfully Inserted", status="success")
except ValueError:
return DefaultResponse(message="Due to value error")
except Exception as e:
logging.exception(e)
return DefaultResponse(message="Insertion Failed due to server error")
@router.get(APIEndpoints.find)
async def find_item():
try:
data = handler.find_data()
return DefaultResponse(message="Successfully Found", status="success", data=data)
except ValueError:
return DefaultResponse(message="Due to value error")
except Exception as e:
logging.exception(e)
return DefaultResponse(message="Finding Failed due to server error")
import sqlite3
def create_sqlite_connection():
conn = sqlite3.connect("internsb2.db",check_same_thread=False)
return conn
import sqlite3
from script.core.schema.model import Employee
from script.utils.sqlite_connection import create_sqlite_connection
conn = create_sqlite_connection()
cur = conn.cursor()
Employee.create_tables()
class Utils:
@staticmethod
def create_info(id: int, name: str, city: str):
conn = sqlite3.connect("internsb2.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO user_info (id, name, city) VALUES (?, ?,?)", (id, name, city))
conn.commit()
return {"message": "User info created successfully"}
@staticmethod
def insert_into_subordinate(id, user_id, subordinate_ids, subordinate_name):
try:
create_sqlite_connection()
cursor = conn.cursor()
cursor.execute(
"INSERT INTO subordinates_info (id, user_id, subordinate_name, subordinate_ids) VALUES (?, ?, ?, ?)",
(id, user_id, subordinate_name, ",".join(str(i) for i in subordinate_ids)))
conn.commit()
conn.close()
print("Subordinate IDs:", ", ".join(str(i) for i in subordinate_ids))
except Exception as e:
print(e)
@staticmethod
def find_query(user_id):
cursor = conn.cursor()
cursor.execute("SELECT id, name, city FROM Employee WHERE id=?", (user_id,))
user_data = cursor.fetchall()
cursor.execute("SELECT id, user_id, subordinate_ids, subordinate_name FROM Subordinates WHERE user_id=?",
(user_id,))
subordinates_data = cursor.fetchall()
list_ = []
for data in user_data:
list_.append({"id": data[0], "name": data[1], "city": data[2]})
for data in subordinates_data:
list_.append({"id": data[0], "user_id": data[1], "subordinate_ids": data[2], "subordinate_name": data[3]})
conn.close()
return list_
return {"message": "successfully founded"}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment