Skip to content

one-zero-eight/search

Repository files navigation

InNoHassle Search

GitHub Actions pre-commit

Lines of Code Bugs Vulnerabilities

Table of contents

Did you know that GitHub supports table of contents by default 🤔

About

This is the API for search service in InNoHassle ecosystem.

Features

  • WIP

Technologies

Development

Getting started

  1. Install Python 3.11+

  2. Install Poetry

  3. Install project dependencies with Poetry.

    poetry install --no-root --with dev
  4. Set up pre-commit hooks:

    poetry run pre-commit install --install-hooks -t pre-commit -t commit-msg
  5. Set up project settings file (check settings.schema.yaml for more info).

    cp settings.example.yaml settings.yaml

    Edit settings.yaml according to your needs.

  6. Set up a MongoDB database instance.

    Using docker container
    • Set up database settings for docker-compose container in .env file:х

      cp .env.example .env
    • Run the database instance:

      docker compose up -d db
    • Make sure to set up the actual database connection in settings.yaml.

Set up PyCharm integrations

  1. Ruff (plugin). It will lint and format your code. Make sure to enable Use ruff format option in plugin settings.
  2. Pydantic (plugin). It will fix PyCharm issues with type-hinting.
  3. Conventional commits (plugin). It will help you to write conventional commits.

Run for development [API]

  1. Install dependencies for api if needed:

    poetry install --no-root --with api
  2. Run the database if you have not done it yet

  3. Run the ASGI server

    poetry run python -m src.api

    OR using uvicorn directly

    poetry run uvicorn src.api.app:app --use-colors --proxy-headers --forwarded-allow-ips=* --port=8001

Now the API is running on http://localhost:8001. Good job!

Authentication

We use our own IAM service for authentication - InNoHassle Accounts. To authenticate the user, you need to pass the Authorization header with the Bearer: <jwt_token>. How to get token:

  1. First of all, go to innohassle.ru and log in if you are not logged in (or register). That will add cookie with account secret needed for the next step.
  2. Go to Accounts API and execute the the method GET /tokens/generate-my-token, copy the token from the response.
  3. Go to the Swagger of API you want to authenticate and click on the Authorize button in the top right corner, paste the token in the Value field and click Authorize. Now you can use protected endpoints from the Swagger.

Deployment

We use Docker with Docker Compose plugin to run the website on servers.

  1. Copy the file with environment variables: cp .env.example .env
  2. Change environment variables in the .env file
  3. Copy the file with settings: cp settings.example.yaml settings.yaml
  4. Change settings in the settings.yaml file according to your needs (check settings.schema.yaml for more info)
  5. Install Docker with Docker Compose
  6. Build a Docker image: docker compose build --pull
  7. Run the container: docker compose up --detach
  8. Check the logs: docker compose logs -f

Contributing

We are open to contributions of any kind. You can help us with code, bugs, design, documentation, media, new ideas, etc. If you are interested in contributing, please read our contribution guide.