Commit 281b53be authored by ramya.r's avatar ramya.r

first

parents
# Default ignored files
/shelf/
/workspace.xml
main.py
\ 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/task3.iml" filepath="$PROJECT_DIR$/.idea/task3.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=8000
host=0.0.0.0
\ No newline at end of file
import uvicorn
from fastapi import FastAPI
from dotenv import load_dotenv
import script
load_dotenv()
from script.config.app_config import Service
from script.service.weather import router
app = FastAPI(title="Weather")
app.include_router(router)
if __name__ == "__main__":
uvicorn.run("main:app", host=script.config.app_config.Service.host, port=script.config.app_config.Service.port)
from configparser import SafeConfigParser
config = SafeConfigParser()
config.read('conf/application.conf')
class Service:
port = int(config.getint("SERVICE", "port"))
host = config.get("SERVICE", "host")
class APIEndpoints:
report_base= "/report_base"
\ No newline at end of file
class NameDoesNotExist(Exception):
pass
\ No newline at end of file
This diff is collapsed.
from numba import optional
from pydantic import BaseModel
# define a model for Item
class Weather(BaseModel):
minimum = optional[int]
maximum = optional[int]
average = optional[int]
from typing import Any, Optional
from pydantic import BaseModel
class DefaultResponse(BaseModel):
status: str = "failed"
message: str
data: Optional[Any]
from fastapi import FastAPI, File, UploadFile, APIRouter
import pandas as pd
from io import StringIO
import logging
from script.constant import APIEndpoints
from script.core.handlers.weather_connection import WeatherReport
from script.core.schema.response import DefaultResponse
router = APIRouter(prefix=APIEndpoints.report_base)
data = None
@router.post("/upload")
def upload_file(file: UploadFile = File(...)):
contents = file.file.read()
s = str(contents, 'utf-8')
raw_data = StringIO(s)
global data
data = pd.read_csv(raw_data)
raw_data.close()
file.file.close()
return {"filename": file.filename}
@router.get("/daily")
def daily_data(date: str):
try:
global data
op = WeatherReport.daily_data(data, date)
return DefaultResponse(message="Successfully found", status="success", data=op)
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")
@router.get("/weekly")
def weekly_data(start_date: str, end_date: str):
try:
global data
op = WeatherReport.weekly_data(data, start_date, end_date)
return DefaultResponse(message="Successfully found", status="success", data=op)
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")
@router.get("/monthly")
def monthly_data(year: int, month: int):
try:
global data
op = WeatherReport.monthly_data(data, year, month)
return DefaultResponse(message="Successfully found", status="success", data=op)
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")
@router.get("/email")
def get_email(sender: str, receiver: str, password: str):
try:
WeatherReport.send_file(sender, receiver, password)
return DefaultResponse(message="Successfully found", status="success")
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")
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