Spaces:
Running
Running
import os | |
from http import HTTPStatus | |
from fastapi.responses import JSONResponse | |
from restful.services import cryptocurrency_svc | |
from restful.schemas import CryptocurrencyPredictionSchema | |
# Cryptocurrency Controller | |
class cryptocurrency_controller: | |
# Cryptocurrency Service | |
__SERVICE = cryptocurrency_svc() | |
# Cryptocurrency List | |
async def crypto_list(self) -> JSONResponse: | |
try: | |
DATASETS_PATH = './datasets' | |
DATASETS = sorted( | |
[ | |
item.replace(".csv", "") for item in os.listdir(DATASETS_PATH) | |
if os.path.isfile(os.path.join(DATASETS_PATH, item)) and item.endswith('.csv') | |
] | |
) | |
return JSONResponse( | |
content = { | |
'message': 'Success', | |
'status_code': HTTPStatus.OK, | |
'data': DATASETS | |
}, | |
status_code = HTTPStatus.OK | |
) | |
except Exception as error_message: | |
print(error_message) | |
return JSONResponse( | |
content = { | |
'message': 'Internal Server Error', | |
'status_code': HTTPStatus.INTERNAL_SERVER_ERROR, | |
'data': None | |
}, | |
status_code = HTTPStatus.INTERNAL_SERVER_ERROR | |
) | |
# Cryptocurrency Controller | |
async def prediction(self, payload: CryptocurrencyPredictionSchema) -> JSONResponse: | |
try: | |
DATASETS_PATH = './datasets' | |
DATASETS = sorted( | |
[ | |
item.replace(".csv", "") for item in os.listdir(DATASETS_PATH) | |
if os.path.isfile(os.path.join(DATASETS_PATH, item)) and item.endswith('.csv') | |
] | |
) | |
# Validation | |
if (payload.days > 31) or (payload.days < 1): | |
return JSONResponse( | |
content = { | |
'message': 'prediction days cannot be more than a month and cannot be less than 1', | |
'status_code': HTTPStatus.BAD_REQUEST, | |
'data': None | |
}, | |
status_code = HTTPStatus.BAD_REQUEST | |
) | |
if payload.currency not in DATASETS: | |
return JSONResponse( | |
content = { | |
'message': f'cryptocurrency {payload.currency} is not available.', | |
'status_code': HTTPStatus.BAD_REQUEST, | |
'data': None | |
}, | |
status_code = HTTPStatus.BAD_REQUEST | |
) | |
prediction: dict = await self.__SERVICE.prediction(payload) | |
if not prediction : | |
return JSONResponse( | |
content = { | |
'message': 'prediction could not be generated, please try again.', | |
'status_code': HTTPStatus.BAD_REQUEST, | |
'data': None | |
}, | |
status_code = HTTPStatus.BAD_REQUEST | |
) | |
return JSONResponse( | |
content = { | |
'message': 'prediction success', | |
'status_code': HTTPStatus.OK, | |
'data': { | |
'currency': payload.currency, | |
'predictions': prediction | |
} | |
}, | |
status_code = HTTPStatus.OK | |
) | |
except Exception as error_message: | |
print(error_message) | |
return JSONResponse( | |
content = { | |
'message': 'internal server error', | |
'status_code': HTTPStatus.INTERNAL_SERVER_ERROR, | |
'data': None | |
}, | |
status_code = HTTPStatus.INTERNAL_SERVER_ERROR | |
) | |