{"id":20986722,"url":"https://github.com/kilgoretrout1985/yadiskapi-shbr","last_synced_at":"2026-04-02T18:52:48.424Z","repository":{"id":98489769,"uuid":"534697088","full_name":"kilgoretrout1985/yadiskapi-shbr","owner":"kilgoretrout1985","description":"Test task for Yandex backend school autumn 2022 / Тестовое задание для осенней школы бекэнд-разработки Яндекса. Python asyncio REST-service.","archived":false,"fork":false,"pushed_at":"2024-06-08T13:15:49.000Z","size":85,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-13T11:26:23.679Z","etag":null,"topics":["asyncio","asyncpg","docker","docker-compose","fastapi","postgresql","pytest-asyncio","python3","rest","rest-api","test-task"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kilgoretrout1985.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-09T15:22:06.000Z","updated_at":"2024-06-08T13:15:52.000Z","dependencies_parsed_at":"2023-06-28T07:30:28.734Z","dependency_job_id":null,"html_url":"https://github.com/kilgoretrout1985/yadiskapi-shbr","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kilgoretrout1985/yadiskapi-shbr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kilgoretrout1985%2Fyadiskapi-shbr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kilgoretrout1985%2Fyadiskapi-shbr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kilgoretrout1985%2Fyadiskapi-shbr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kilgoretrout1985%2Fyadiskapi-shbr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kilgoretrout1985","download_url":"https://codeload.github.com/kilgoretrout1985/yadiskapi-shbr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kilgoretrout1985%2Fyadiskapi-shbr/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262685118,"owners_count":23348409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","asyncpg","docker","docker-compose","fastapi","postgresql","pytest-asyncio","python3","rest","rest-api","test-task"],"created_at":"2024-11-19T06:14:45.245Z","updated_at":"2025-12-30T22:21:06.613Z","avatar_url":"https://github.com/kilgoretrout1985.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Run and test using virtualenv #\n\n1)  ```\n    git clone https://github.com/kilgoretrout1985/yadiskapi-shbr.git \u0026\u0026 \\\n    cd ./yadiskapi-shbr/ \u0026\u0026 \\\n    python3.10 -m venv .env \u0026\u0026 \\\n    source .env/bin/activate \u0026\u0026 \\\n    pip install -U pip \u0026\u0026 \\\n    pip install -e .[dev]\n    ```\n\n2)  Configure Postgres connect dsn by editing `src/yadiskapi/config.py`.\n\n    If you can't or do not want to edit config.py (like storing secrets in \n    a file) - you can change config.py settings at runtime using environment \n    variables, e.g.:\n    \n    ```\n    DB_DSN=\"postgresql+asyncpg://yadiskapi:pass@localhost/yadiskapi\" uvicorn main:app --loop=uvloop\n    ```\n\n    This is a single bash line that sets env var `DB_DSN` specifically for \n    current uvicorn-run and than runs it. Same for running tests:\n\n    ```\n    DB_TEST_DSN=\"postgresql+asyncpg://yadiskapi:pass@localhost/yadiskapi_test\" pytest\n    ```\n\n3)  Run `tox` or `pytest` to test your setup. Everything should be green at this point.\n    You can also run `locust` for load testing.\n\n4)  Run web-server with this command:\n    ```\n    cd src/yadiskapi \u0026\u0026 python main.py \u0026\u0026 uvicorn main:app --loop=uvloop\n    ```\n\n    `python main.py` is used to create initial db tables before first run. \n    \n    Use `python main.py --drop-all` to drop (delete all!) and recreate db in case you need it.\n\n5)  Open [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) for interactive docs.\n\n\n# Run with docker-compose #\n\n1)  Run:\n    ```\n    docker-compose up -d\n    ```\n\n2)  Open [http://0.0.0.0:80/docs](http://0.0.0.0:80/docs) for interactive docs.\n\n\n# Run in a docker container using your Postgres #\n\n1)  Build image:\n    \n    ```\n    docker build -t yadiskapi-image .\n    ```\n\n2)  Find out your correct Postgres dsn, like:\n    \n    ```\n    postgresql+asyncpg://yadiskapi:pass@172.17.0.1/yadiskapi\n    ```\n\n    For standart Docker for Linux, IP-address **of the host** most likely will \n    be 172.17.0.1. The easiest way to get it is `ifconfig docker0`.\n\n2)  Run your image:\n    \n    ```\n    docker run --name yadiskapi -d -p 80:80 \\\n        -e DB_DSN=\"postgresql+asyncpg://yadiskapi:pass@172.17.0.1/yadiskapi\" \\\n        --restart unless-stopped yadiskapi-image\n    ```\n\n    In case of errors change `-p 80:80` to something like `-p 8080:80` if port \n    80 is already taken by another web-server on your machine.\n\n4)  Open [http://0.0.0.0:80/docs](http://0.0.0.0:80/docs) for interactive docs.\n\n\n# Run in a docker container using Postgres from docker container #\n\n1)  Build your image:\n    \n    ```\n    docker build -t yadiskapi-image .\n    ```\n\n2)  Create a separate docker volume where all Postgres data \n    will be actually stored. So this docker container is persistent between runs.\n\n    ```\n    docker volume create yadiskapi-pgdata\n    ```\n\n3)  Run standart docker image of Postgres:\n    \n    ```\n    docker run --name yadiskapi-db -d -p 5432:5432 \\\n        -e POSTGRES_USER=yadiskapi -e POSTGRES_PASSWORD=pass -e POSTGRES_DB=yadiskapi \\\n        -e PGDATA=/var/lib/postgresql/data \\\n        -v yadiskapi-pgdata:/var/lib/postgresql/data \\\n        --restart unless-stopped postgres:14.5\n    ```\n\n    If port 5432 is already taken on your machine, change it to something like\n    `-p 25432:5432` and supply connect-dsn with corrected port to yadiskapi container\n    on the next step.\n\n4)  Run your image:\n    \n    ```\n    docker run --name yadiskapi -d -p 80:80 \\\n        -e DB_DSN=\"postgresql+asyncpg://yadiskapi:pass@172.17.0.1/yadiskapi\" \\\n        --restart unless-stopped yadiskapi-image\n    ```\n\n    In case of errors change `-p 80:80` to something like `-p 8080:80` if port \n    80 is already taken by another web-server on your machine.\n\n5)  Open [http://0.0.0.0:80/docs](http://0.0.0.0:80/docs) for interactive docs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkilgoretrout1985%2Fyadiskapi-shbr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkilgoretrout1985%2Fyadiskapi-shbr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkilgoretrout1985%2Fyadiskapi-shbr/lists"}