openclimatefix / uk-pv-national-gsp-api

API for hosting nowcasting solar predictions
MIT License
6 stars 9 forks source link
nowcasting

Nowcasting API

All Contributors

codecov

API for hosting nowcasting solar predictions. Will just return 'dummy' numbers until about mid-2022!

We use FastAPI.

Documentation

Documentation can be viewed at /docs or /swagger. This is automatically generated from the code.

Setup and Run

This can be done it two different ways: With Python or with Docker.

Python

Create a virtual env

python3 -m venv ./venv
source venv/bin/activate

Install Requirements and Run

pip install -r requirements.txt
cd src && uvicorn main:app --reload

You may need to run the following additional installation pip install git+https://github.com/SheffieldSolar/PV_Live-API#pvlive_api for pvlive-api, as in the Dockerfile.

If you don't have a local database set up, you can leave the DB_URL string empty (default not set) and the API will still run and return routes such as http://localhost:8000/ for API info and any other non-DB routes with DB dependencies e.g. session/caching commented out.

You will not be able to access any routes using the DB client / database, but for local development of new routes this should work for now, until we reinstate dynamic fake data as a dependable dev tool.

[ Docker ]

πŸ›‘ Currently non-functional, needs updating to migrate database to match datamodel

  1. Make sure docker is installed on your system.
  2. Use docker-compose up in the main directory to start up the application.
  3. You will now be able to access it on http://localhost:80

Tests

TO run tests use the following command

docker stop $(docker ps -a -q)
docker-compose -f test-docker-compose.yml build
docker-compose -f test-docker-compose.yml run api

Development

We use pre-commit to manage various pre-commit hooks. All hooks are also run as Actions when code is pushed to GitHub.

You can run the formatters and linters locally. To do that:

  1. Install pre-commit
  2. Check the install worked via pre-commit --v
  3. Install the git hooks script via pre-commit install

Deployment

Deployment of this service is now done through terraform cloud.

Environmental Variables

Routes to SQL tables

National

  graph TD;
      N1(national/forecast) --> Q1;
      Q1{Include metadata?>} -->|no| Q2;
      Q1 --> |yes| N2[NationalForecast];
      N4[ForecastValueLatest];
      Q2{forecast horizon <br> minutes not None}
      Q2-->|yes| N5[ForecastValueSevenDays];
      Q2-->|no| N4;

      NP1(national/pvlive)-->NP2;
      NP2[GSPYield];

GSP

  graph TD;
      G1(gsp/forecast/all);
      G1--> N3[ManyForecasts];

      G3(gsp/gsp_id/forecast) -->Q4;
      Q4{forecast horizon <br> minutes not None}
      Q4-->|yes| G7[ForecastValueSevenDays];
      Q4-->|no| G6[ForecastValueLatest];

      GP1(gsp/pvlive/all)-->GP2;
      GP2[LocationWithGSPYields];

      GP3(gsp/gsp_id/pvlive)-->GP4;
      GP4[GSPYield];

Extras

  graph TD;
      G1(status)-->G2;
      G2[Status];

      G3(gsp)-->G4
      G4[Location]

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Peter Dudfield
Peter Dudfield

πŸ’»
Mohammed Faisal
Mohammed Faisal

πŸ’»
Bodale Denis
Bodale Denis

πŸ’»
Souhit Dey
Souhit Dey

πŸ’»
Flo
Flo

πŸ’»
Shanmukh
Shanmukh

πŸ’»
Sixte de Maupeou
Sixte de Maupeou

πŸ’»
rachel tipton
rachel tipton

πŸ’»
braddf
braddf

πŸ’»
Dorin
Dorin

πŸ‘€
Peter Hull
Peter Hull

πŸ’»
Pedro Garcia Rodriguez
Pedro Garcia Rodriguez

πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!