refactor(chart): Added docstring in each file and function. Fixed long lines

This commit is contained in:
Данил 2024-12-15 10:51:32 +03:00
parent c5d3d9fe9b
commit ed8cf91558
7 changed files with 190 additions and 30 deletions

View file

@ -1,34 +1,60 @@
"""
This module contains the route for retrieving a chart based on a given currency pair and date range.
It defines the `/api/getChart/` endpoint that processes requests for generating charts.
"""
from fastapi import APIRouter, status, Request, Response
from pydantic import BaseModel
from chart.function.create_chart import create_chart
from chart.routes.get_chart_period import prepare_chart_response
router = APIRouter()
class ChartRequestParams(BaseModel):
"""
A Pydantic model that represents the request parameters for generating a chart.
This model is used to validate and group the request parameters:
from_currency, conv_currency, start_date, and end_date.
"""
from_currency: str
conv_currency: str
start_date: str
end_date: str
@router.get("/api/getChart/", status_code=status.HTTP_201_CREATED)
async def get_chart(
response: Response,
request: Request,
from_currency: str = None,
conv_currency: str = None,
start_date: str = None,
end_date: str = None,
params: ChartRequestParams
):
"""
Fetches a chart for a given currency pair and date range.
if not from_currency or not conv_currency:
:param response: The response object used for returning the HTTP response.
:param request: The request object containing details about the incoming request.
:param params: Contains the request parameters:
from_currency, conv_currency, start_date, and end_date.
:return: A chart or an error message if the request is invalid.
"""
if not params.from_currency or not params.conv_currency:
response.status_code = status.HTTP_400_BAD_REQUEST
return {
'status': status.HTTP_400_BAD_REQUEST,
'message': 'The from_currency and conv_currency fields are required.',
}
elif not start_date and not end_date:
if not params.start_date or not params.end_date:
response.status_code = status.HTTP_400_BAD_REQUEST
return {
'status': status.HTTP_400_BAD_REQUEST,
'message': 'The start_date and end_date fields are required.',
}
chart = await create_chart(from_currency, conv_currency, start_date, end_date)
chart = await create_chart(
params.from_currency,
params.conv_currency,
params.start_date,
params.end_date
)
return await prepare_chart_response(response, request, chart)

View file

@ -1,5 +1,12 @@
"""
This module defines the route for fetching a chart for a specific currency pair and period.
It includes the endpoint `/api/getChart/{period}` which allows users to request a chart for
a given currency pair (from_currency and conv_currency)
over a specified time period (week, month, quarter, or year).
"""
from datetime import datetime
import dateutil.relativedelta
from dateutil.relativedelta import relativedelta
from fastapi import APIRouter, status, Request, Response
@ -15,7 +22,20 @@ async def get_chart_period(
conv_currency: str = None,
period: str = None,
):
"""
Fetches a chart for a given currency pair and a specific period.
The period can be one of the following: 'week', 'month', 'quarter', 'year'.
Based on the selected period, it calculates the start date and retrieves the chart data.
:param response: The response object used to set status and message.
:param request: The request object used to retrieve details of the incoming request.
:param from_currency: The base currency in the pair (e.g., 'USD').
:param conv_currency: The target currency in the pair (e.g., 'EUR').
:param period: The time period for which the chart is requested
(e.g., 'week', 'month', 'quarter', 'year').
:return: A response containing the chart URL or an error message if parameters are invalid.
"""
if not from_currency or not conv_currency:
response.status_code = status.HTTP_400_BAD_REQUEST
return {
@ -39,7 +59,7 @@ async def get_chart_period(
years = -1
end_date = datetime.now()
start_date = end_date + dateutil.relativedelta.relativedelta(months=month, days=days, years=years)
start_date = end_date + relativedelta(months=month, days=days, years=years)
chart = await create_chart(
from_currency,
@ -51,7 +71,22 @@ async def get_chart_period(
return await prepare_chart_response(response, request, chart)
async def prepare_chart_response(response: Response, request: Request, chart_name: str):
async def prepare_chart_response(
response: Response,
request: Request,
chart_name: str
):
"""
Prepares the response to return the URL of the generated chart.
If the chart data is not found, it returns a 404 error with an appropriate message.
Otherwise, it returns a URL to access the chart image.
:param response: The response object used to set status and message.
:param request: The request object used to retrieve details of the incoming request.
:param chart_name: The name of the generated chart (used to build the URL).
:return: A dictionary with the chart URL or an error message if no chart is found.
"""
if not chart_name:
response.status_code = status.HTTP_404_NOT_FOUND
return {'message': 'No data found.', 'status_code': status.HTTP_404_NOT_FOUND}