Skip to content

avwx-rest/account-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

account-backend

python FastAPI Hatch project Checked with mypy License: MIT

AVWX account management backend service

Intro

The AVWX Account API runs on top of a MongoDB store with the following features:

  • Registration
  • Email verification
  • Password reset
  • JWT auth login and refresh
  • User model CRUD
  • Token management and usage
  • Stripe Checkout integration

It's built on top of these libraries to provide those features:

Setup

This codebase was written for Python 3.12 and above. Don't forget about a venv as well. The python commands below assume you're pointing to your desired Python3 target.

We use hatch to manage all of our tooling and sub-environments, but you may still wish to install the requirements if you want things like autocomplete to work in your code editor of choice.

python -m pip install -e .

Before we run the server, there is one config variable you'll need to generate: the password salt. To do this, just run the script in this repo.

cp sample.env .env
python util/gen_salt.py

There are other settings in config.py and the included .env file. Assuming you've changed the SALT value, everything should be able to test as-is if there is a local MongoDB instance running (see below for a Docker solution). Certain runtime features are disabled during testing. You will need to fill in the Stripe fields before the server is fully operational. Any email links will be printed to the console by default.

Run

The API uses uvicorn as our ASGI web server. This allows us to run our server code in a much more robust and configurable environment than the development server. For example, ASGI servers let you run multiple workers that recycle themselves after a set amount of time or number of requests.

hatch run serve:reload

Your API should now be available at http://localhost:8080

You can also let Docker manage the Python runtime if you want to. Just make sure you found a way to set the salt in the environment variables.

docker build -t avwx-account .
docker run -p 8080:8080 avwx-account

Develop

This codebase is uses mypy for type checking and hatch for everything else.

To run the type checker:

hatch run types:check

To run the linter and code formatter:

hatch fmt

Test

The tests need access to a MongoDB store that is emptied at the end of each test. The easiest way to do this is to run a Mongo container in the background.

docker run -d -p 27017:27017 mongo:7

You can also connect to a remote server if you're running tests in a CI/CD pipeline. Just set the TEST_MONGO_URI in the environment. This value defaults to localhost and is only checked in the test suite. It should never use your MONGO_URI.

Then just run the test suite.

hatch test

About

AVWX account management backend service

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published