Commit 191d1109 by mohammed.shibili

first

parents
# Default ignored files
/shelf/
/workspace.xml
<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="N801" />
</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="Python 3.9 (ticketBook)" 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/ticketBook.iml" filepath="$PROJECT_DIR$/.idea/ticketBook.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$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
[log]
api_port_num = 8000
\ No newline at end of file
import uvicorn
from scripts.config.appconfig import api_port
if __name__ == "__main__":
uvicorn.run("scripts.service.booking:app", port=int(api_port),reload=True)
import configparser
config = configparser.RawConfigParser()
config.read("conf/ticket.conf")
api_port = config.get("log", "api_port_num")
from pydantic import BaseModel
class CustomerDetails(BaseModel):
preferred_class: str
mobile_no: int
no_of_tickets: int
age: int
class SeatList(BaseModel):
seats_no = str
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Sequence, String, Integer, DateTime, func, create_engine
Base = declarative_base()
class Customer(Base):
__tablename__ = 'customers'
id = Column(Integer, Sequence('customer_id_seq'), primary_key=True)
ticket_class = Column(String)
mobile_number = Column(String)
no_of_tickets = Column(Integer)
age = Column(Integer)
date = Column(DateTime, default=func.now())
engine = create_engine('postgresql://postgres:admin@localhost/ticket_details')
# create the customers table
Base.metadata.create_all(engine)
# start a session
Session = sessionmaker(bind=engine)
session = Session()
def data_get(data):
session.add(data)
session.commit()
import redis
import pickle
class RedisConnections:
@staticmethod
def golden_():
# creating redis connection
try:
redis_1 = redis.Redis(host="127.0.0.1", port=6379, db=0)
seats_available_gold = []
for row in range(0, 300, 30):
seats_available_gold.append([seat for seat in range(row + 1, row + 31)])
redis_1.set("available_seats", pickle.dumps(seats_available_gold))
return redis_1
except Exception as e:
print("redis connection fail", e)
@staticmethod
def silver_():
try:
redis_2 = redis.Redis(host="127.0.0.1", port=6379, db=0)
seats_available_silver = []
for rows in range(0, 125, 25):
seats_available_silver.append([seats for seats in range(rows + 1, rows + 26)])
redis_2.set("available_seats", pickle.dumps(seats_available_silver))
return redis_2
except Exception as e:
print("redis connection fail", e)
import datetime
from fastapi import FastAPI, HTTPException
import pickle
from scripts.database.models.base import CustomerDetails, SeatList
from scripts.database.postgresDB.postgres_connection import Customer, data_get
from scripts.database.redis_db.redis_connection import RedisConnections
app = FastAPI()
@app.get("/seats_golden", tags=["view seats"])
async def available_seats():
golden_db = RedisConnections().golden_()
seats_available = golden_db.get("available_seats")
return pickle.loads(seats_available)
@app.get("/seats_silver", tags=["view seats"])
async def available_in_silver():
silver_db = RedisConnections().silver_()
seats_available = silver_db.get("available_seats")
return pickle.loads(seats_available)
@app.post("/to_postgres", tags=["booking"])
async def customer_details(seats: SeatList, customer: CustomerDetails):
if customer.no_of_tickets > 6:
HTTPException("one person can only book 5 tickets")
customers = Customer(ticket_class=customer.preferred_class, mobile_number=customer.mobile_no,
no_of_tickets=customer.no_of_tickets, age=customer.age)
SeatList(seat_no=seats.seats_no)
data_get(customers)
return customer, seats
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