This API is part of a bigger application, before going further, please go to the main project readme, where you can find an introduction.
This python API is built with FastAPI and is for in silico cloning.
Read main project readme first.
This API provides a series of entry points. The API documentation can be accessed here. You can use the documentation page to try some request directly on the browser. Otherwise, the API is open for you to make requests from a python script or command line at: https://shareyourcloning.api.genestorian.org/.
If you want to quickly set up a local instance of the frontend and backend of the application, check getting started in 5 minutes in the main repository.
You should have python 3.9 installed in your machine. For the management of the dependencies poetry
is used, if you don't have it, visit https://python-poetry.org/.
In the project directory:
# This should install the dependencies and create a virtual environment
poetry install
# If you want to develop: poetry install --with dev --with test
# If you want to commit to the repo, install the pre-commit hooks (needs poetry install --with dev)
pre-commit install
# Activate the virtual environment
poetry shell
The virtual environment is install in the project folder. This is convenient if you are using an IDE for development. For settings of vscode see the folder .vscode
.
Now you should be able to run the api by running:
# The --reload argument will reload the API if you make changes to the code
uvicorn main:app --reload --reload-exclude='.venv'
Then you should be able to open the API docs at http://127.0.0.1:8000/docs to know that your API is working.
If you want to serve the full site (backend and frontend) with docker, check getting started in 5 minutes in the main repository.
If you want to serve only the frontend from a docker container, an image is available at manulera/shareyourcloningbackend. The image is built from the Dockerfile in the root of this repository and exposes the port 3000. To run it:
docker build -t manulera/shareyourcloningbackend .
docker run -d --name backendcontainer -p 8000:8000 manulera/shareyourcloningbackend
If you don't want to download the repository and build the image, you can fetch the latest image from dockerhub (same image that is used in https://shareyourcloning.api.genestorian.org/)
docker pull manulera/shareyourcloningbackend
docker run -d --name backendcontainer -p 8000:8000 manulera/shareyourcloningbackend
The api will be running at http://localhost:8000
, so you should be able to access the docs at http://localhost:8000/docs.
If you want to receive requests from the frontend, or from another web application you may have to include the url of the frontend application in the CORS exceptions. By default, if you run the dev server with uvicorn main:app --reload --reload-exclude='.venv'
, the backend will accept requests coming from http://localhost:3000
, which is the default address of the frontend dev server (ran with yarn start
).
If you want to change the allowed origins, you can do so via env variables (comma-separated). e.g.:
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3001 uvicorn main:app --reload --reload-exclude='.venv'
Similarly, the frontend should be configured to send requests to the backend address, see here.
You may prefer to handle everything from a single server. You can do so by:
- Build the frontend with
yarn build
. - Copy the folder
build
from the frontend to the root directory of the backend, and rename it tofrontend
. - Set the environment variable
SERVE_FRONTEND=1
when running the backend. By default this will remove all allowed origins, but you can still set them withALLOWED_ORIGINS
. - Set the value of
backendUrl
infrontend/config.js
to/
. - Now, when you go to the root of the backend (e.g.
http://localhost:8000
), you should receive the frontend instead of the greeting page of the API.
You can see how this is done in this docker image and docker-compose file.
Check contribution guidelines in the main repository for general guidelines.
For more specific tasks:
- Creating a new type of source: follow the new source issue template. You can create an issue like that [here](
pytest -v
poetry add git+https://github.com/BjornFJohansson/pydna#4fd760d075f77cceeb27969e017e04b42f6d0aa3
For the frontend, it may be useful to produce stubs (I use them for writing the tests). See how this is implemented
by looking at the RecordStubRoute
class in record_stub_route.py
. To run the dev server and record stubs:
RECORD_STUBS=1 uvicorn main:app --reload --reload-exclude='.venv'