docker-compose
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
FROM python:3.8
|
FROM python:3.8
|
||||||
COPY requirements.txt /tmp
|
COPY requirements.txt /tmp
|
||||||
RUN pip install -r requirements.txt
|
RUN pip install -r /tmp/requirements.txt
|
||||||
COPY . /tmp/personal_api
|
COPY . /tmp/personal_api
|
||||||
RUN pip install /tmp/personal_api
|
RUN pip install -e /tmp/personal_api
|
||||||
CMD gunicorn -w 4 -k uvicorn.workers.UvicornWorker main.app:app
|
ENV PERSONAL_API_SQLALCHEMY_DATABASE_URL postgresql://doadmin:q606mxj40xfltziw@zev-api-db-do-user-246213-0.db.ondigitalocean.com:25060/defaultdb
|
||||||
|
CMD gunicorn -w 4 -k uvicorn.workers.UvicornWorker personal_api.main:app -b 0.0.0.0
|
||||||
|
|||||||
30
docker-compose.yml
Normal file
30
docker-compose.yml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
version: '3.7'
|
||||||
|
services:
|
||||||
|
nginx:
|
||||||
|
container-name: nginx
|
||||||
|
image: nginx:latest
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- ./data/nginx:/etc/nginx/conf.d
|
||||||
|
- ./data/certbot/conf:/etc/letsencrypt
|
||||||
|
- ./data/certbot/www:/var/www/certbot
|
||||||
|
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
|
||||||
|
certbot:
|
||||||
|
image: certbot/certbot
|
||||||
|
volumes:
|
||||||
|
- ./data/certbot/conf:/etc/letsencrypt
|
||||||
|
- ./data/certbot/www:/var/www/certbot
|
||||||
|
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: ./
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: personal_api:0.0.1
|
||||||
|
container_name: personal_api
|
||||||
|
volumes:
|
||||||
|
- ./:/personal_api/
|
||||||
|
command: gunicorn -w 4 -k uvicorn.workers.UvicornWorker personal_api.main:app -b 0.0.0.0
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
@@ -3,7 +3,7 @@ import datetime as dt
|
|||||||
import dateparser as dp
|
import dateparser as dp
|
||||||
from sqlalchemy import Column, Integer, desc
|
from sqlalchemy import Column, Integer, desc
|
||||||
|
|
||||||
from app.database import SessionLocal
|
from personal_api.database import SessionLocal
|
||||||
|
|
||||||
|
|
||||||
class Invalid(Exception):
|
class Invalid(Exception):
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
import app.models
|
from personal_api.database import Base
|
||||||
from app.database import Base
|
|
||||||
from . import schemas
|
|
||||||
|
|
||||||
|
|
||||||
class DoesntExist(Exception):
|
class DoesntExist(Exception):
|
||||||
@@ -4,10 +4,10 @@ from fastapi import FastAPI, Depends, HTTPException
|
|||||||
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
from starlette.status import HTTP_401_UNAUTHORIZED, HTTP_409_CONFLICT
|
from starlette.status import HTTP_401_UNAUTHORIZED
|
||||||
|
|
||||||
from app import schemas, models
|
|
||||||
from config import PERSONAL_API_USERNAME, PERSONAL_API_PASS
|
from config import PERSONAL_API_USERNAME, PERSONAL_API_PASS
|
||||||
|
from personal_api import schemas, models
|
||||||
from .crud import (
|
from .crud import (
|
||||||
create_thing as create, get_thing as get, update_thing as update, DoesntExist,
|
create_thing as create, get_thing as get, update_thing as update, DoesntExist,
|
||||||
delete_thing as delete,
|
delete_thing as delete,
|
||||||
@@ -5,7 +5,7 @@ as well as adding a self.when value in the constructor
|
|||||||
import datetime as dt
|
import datetime as dt
|
||||||
from sqlalchemy import Column, DateTime, String, Boolean, Date
|
from sqlalchemy import Column, DateTime, String, Boolean, Date
|
||||||
|
|
||||||
from app.database import Base, SessionLocal
|
from personal_api.database import Base, SessionLocal
|
||||||
from helpers import parse_date_string, BaseMixIn
|
from helpers import parse_date_string, BaseMixIn
|
||||||
|
|
||||||
|
|
||||||
@@ -28,6 +28,7 @@ fastapi = "=0.42.0"
|
|||||||
requests = "=2.22.0"
|
requests = "=2.22.0"
|
||||||
idna = "=2.8"
|
idna = "=2.8"
|
||||||
starlette = "=0.12.9"
|
starlette = "=0.12.9"
|
||||||
|
gunicorn = "^19.9"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
|
|
||||||
|
|||||||
125
requirements.txt
125
requirements.txt
@@ -1,22 +1,103 @@
|
|||||||
certifi==2019.9.11
|
certifi==2019.9.11 \
|
||||||
chardet==3.0.4
|
--hash=sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50 \
|
||||||
click==7.0
|
--hash=sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef
|
||||||
dateparser==0.7.2
|
chardet==3.0.4 \
|
||||||
fastapi==0.42.0
|
--hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \
|
||||||
h11==0.8.1
|
--hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691
|
||||||
httptools==0.0.13
|
click==7.0 \
|
||||||
idna==2.8
|
--hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \
|
||||||
psycopg2==2.8.4
|
--hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7
|
||||||
pydantic==0.32.2
|
dateparser==0.7.2 \
|
||||||
python-dateutil==2.8.0
|
--hash=sha256:983d84b5e3861cb0aa240cad07f12899bb10b62328aae188b9007e04ce37d665 \
|
||||||
pytz==2019.3
|
--hash=sha256:e1eac8ef28de69a554d5fcdb60b172d526d61924b1a40afbbb08df459a36006b
|
||||||
regex==2019.8.19
|
fastapi==0.42.0 \
|
||||||
requests==2.22.0
|
--hash=sha256:38356cf424392142a561f32ab49113dec6e2ab7318862ae14d5e1d7ede16d14f \
|
||||||
six==1.12.0
|
--hash=sha256:48cb522c1c993e238bfe272fbb18049cbd4bf5b9d6c0d4a4fa113cc790e8196c
|
||||||
sqlalchemy==1.3.10
|
gunicorn==19.9.0 \
|
||||||
starlette==0.12.9
|
--hash=sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471 \
|
||||||
tzlocal==2.0.0
|
--hash=sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3
|
||||||
urllib3==1.25.6
|
h11==0.8.1 \
|
||||||
uvicorn==0.9.1
|
--hash=sha256:acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208 \
|
||||||
uvloop==0.14.0rc1
|
--hash=sha256:f2b1ca39bfed357d1f19ac732913d5f9faa54a5062eca7d2ec3a916cfb7ae4c7
|
||||||
websockets==8.0.2
|
httptools==0.0.13 \
|
||||||
|
--hash=sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc
|
||||||
|
idna==2.8 \
|
||||||
|
--hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \
|
||||||
|
--hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c
|
||||||
|
psycopg2==2.8.4 \
|
||||||
|
--hash=sha256:47fc642bf6f427805daf52d6e52619fe0637648fe27017062d898f3bf891419d \
|
||||||
|
--hash=sha256:72772181d9bad1fa349792a1e7384dde56742c14af2b9986013eb94a240f005b \
|
||||||
|
--hash=sha256:8396be6e5ff844282d4d49b81631772f80dabae5658d432202faf101f5283b7c \
|
||||||
|
--hash=sha256:893c11064b347b24ecdd277a094413e1954f8a4e8cdaf7ffbe7ca3db87c103f0 \
|
||||||
|
--hash=sha256:965c4c93e33e6984d8031f74e51227bd755376a9df6993774fd5b6fb3288b1f4 \
|
||||||
|
--hash=sha256:9ab75e0b2820880ae24b7136c4d230383e07db014456a476d096591172569c38 \
|
||||||
|
--hash=sha256:b0845e3bdd4aa18dc2f9b6fb78fbd3d9d371ad167fd6d1b7ad01c0a6cdad4fc6 \
|
||||||
|
--hash=sha256:dca2d7203f0dfce8ea4b3efd668f8ea65cd2b35112638e488a4c12594015f67b \
|
||||||
|
--hash=sha256:ed686e5926929887e2c7ae0a700e32c6129abb798b4ad2b846e933de21508151 \
|
||||||
|
--hash=sha256:ef6df7e14698e79c59c7ee7cf94cd62e5b869db369ed4b1b8f7b729ea825712a \
|
||||||
|
--hash=sha256:f898e5cc0a662a9e12bde6f931263a1bbd350cfb18e1d5336a12927851825bb6
|
||||||
|
pydantic==0.32.2 \
|
||||||
|
--hash=sha256:18598557f0d9ab46173045910ed50458c4fb4d16153c23346b504d7a5b679f77 \
|
||||||
|
--hash=sha256:6a9335c968e13295430a208487e74d69fef40168b72dea8d975765d14e2da660 \
|
||||||
|
--hash=sha256:6f5eb88fe4c21380aa064b7d249763fc6306f0b001d7e7d52d80866d1afc9ed3 \
|
||||||
|
--hash=sha256:bc6c6a78647d7a65a493e1107572d993f26a652c49183201e3c7d23924bf7311 \
|
||||||
|
--hash=sha256:e1a63b4e6bf8820833cb6fa239ffbe8eec57ccdd7d66359eff20e68a83c1deeb \
|
||||||
|
--hash=sha256:ede2d65ae33788d4e26e12b330b4a32c53cb14131c65bca3a59f037c73f6ee7a
|
||||||
|
python-dateutil==2.8.0 \
|
||||||
|
--hash=sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb \
|
||||||
|
--hash=sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e
|
||||||
|
pytz==2019.3 \
|
||||||
|
--hash=sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d \
|
||||||
|
--hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be
|
||||||
|
regex==2019.08.19 \
|
||||||
|
--hash=sha256:1e9f9bc44ca195baf0040b1938e6801d2f3409661c15fe57f8164c678cfc663f \
|
||||||
|
--hash=sha256:587b62d48ca359d2d4f02d486f1f0aa9a20fbaf23a9d4198c4bed72ab2f6c849 \
|
||||||
|
--hash=sha256:835ccdcdc612821edf132c20aef3eaaecfb884c9454fdc480d5887562594ac61 \
|
||||||
|
--hash=sha256:93f6c9da57e704e128d90736430c5c59dd733327882b371b0cae8833106c2a21 \
|
||||||
|
--hash=sha256:a46f27d267665016acb3ec8c6046ec5eae8cf80befe85ba47f43c6f5ec636dcd \
|
||||||
|
--hash=sha256:c5c8999b3a341b21ac2c6ec704cfcccbc50f1fedd61b6a8ee915ca7fd4b0a557 \
|
||||||
|
--hash=sha256:d4d1829cf97632673aa49f378b0a2c3925acd795148c5ace8ef854217abbee89 \
|
||||||
|
--hash=sha256:d96479257e8e4d1d7800adb26bf9c5ca5bab1648a1eddcac84d107b73dc68327 \
|
||||||
|
--hash=sha256:f20f4912daf443220436759858f96fefbfc6c6ba9e67835fd6e4e9b73582791a \
|
||||||
|
--hash=sha256:f2b37b5b2c2a9d56d9e88efef200ec09c36c7f323f9d58d0b985a90923df386d \
|
||||||
|
--hash=sha256:fe765b809a1f7ce642c2edeee351e7ebd84391640031ba4b60af8d91a9045890
|
||||||
|
requests==2.22.0 \
|
||||||
|
--hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \
|
||||||
|
--hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31
|
||||||
|
six==1.12.0 \
|
||||||
|
--hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \
|
||||||
|
--hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73
|
||||||
|
sqlalchemy==1.3.10 \
|
||||||
|
--hash=sha256:0f0768b5db594517e1f5e1572c73d14cf295140756431270d89496dc13d5e46c
|
||||||
|
starlette==0.12.9 \
|
||||||
|
--hash=sha256:c2ac9a42e0e0328ad20fe444115ac5e3760c1ee2ac1ff8cdb5ec915c4a453411
|
||||||
|
tzlocal==2.0.0 \
|
||||||
|
--hash=sha256:11c9f16e0a633b4b60e1eede97d8a46340d042e67b670b290ca526576e039048 \
|
||||||
|
--hash=sha256:949b9dd5ba4be17190a80c0268167d7e6c92c62b30026cf9764caf3e308e5590
|
||||||
|
urllib3==1.25.6 \
|
||||||
|
--hash=sha256:3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398 \
|
||||||
|
--hash=sha256:9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86
|
||||||
|
uvicorn==0.9.1 \
|
||||||
|
--hash=sha256:33c7cfcf71450d2170c9a4c4c7559767329040a36b159e3889554132e4b89457
|
||||||
|
uvloop==0.14.0rc1 \
|
||||||
|
--hash=sha256:182617c2992a79b268bfd193691c4aacb93634e9d8d96edf560a842a6206411d \
|
||||||
|
--hash=sha256:2a0268553d2920108b05250c9711060313851daa60b1052c38b6520320aa50b1 \
|
||||||
|
--hash=sha256:32d2fe6ee6be28a99661e1f02bf6cedb99711df1065a3fb7ba7dd73ccb85f768 \
|
||||||
|
--hash=sha256:448b13a1adfc47745b880b5d5b34c975c7851b1cd3b0eafe2569b2250190c797 \
|
||||||
|
--hash=sha256:469e0e3b80f245ed32f054174e6a69e6a01715dbbb24eb917733fe5af09ad306 \
|
||||||
|
--hash=sha256:682fa2ab24a758831f531dca122f128373c3dd95a3c8885b5fd1c48775d0024f \
|
||||||
|
--hash=sha256:9967fd537f3164607d153900aaae036e9a18015d8478f84406ba58b183f5abfc \
|
||||||
|
--hash=sha256:9ab030794432c47b78199d3f268ac2c898ae85fb9f09e10ae03dd7af62904b0e \
|
||||||
|
--hash=sha256:c1d55b6926d956a29cf5d7cc891004602ea7cd006b0b80354b9b3d973ca9027f
|
||||||
|
websockets==8.0.2 \
|
||||||
|
--hash=sha256:049e694abe33f8a1d99969fee7bfc0ae6761f7fd5f297c58ea933b27dd6805f2 \
|
||||||
|
--hash=sha256:73ce69217e4655783ec72ce11c151053fcbd5b837cc39de7999e19605182e28a \
|
||||||
|
--hash=sha256:83e63aa73331b9ca21af61df8f115fb5fbcba3f281bee650a4ad16a40cd1ef15 \
|
||||||
|
--hash=sha256:882a7266fa867a2ebb2c0baaa0f9159cabf131cf18c1b4270d79ad42f9208dc5 \
|
||||||
|
--hash=sha256:8c77f7d182a6ea2a9d09c2612059f3ad859a90243e899617137ee3f6b7f2b584 \
|
||||||
|
--hash=sha256:8d7a20a2f97f1e98c765651d9fb9437201a9ccc2c70e94b0270f1c5ef29667a3 \
|
||||||
|
--hash=sha256:a7affaeffbc5d55681934c16bb6b8fc82bb75b175e7fd4dcca798c938bde8dda \
|
||||||
|
--hash=sha256:c82e286555f839846ef4f0fdd6910769a577952e1e26aa8ee7a6f45f040e3c2b \
|
||||||
|
--hash=sha256:e906128532a14b9d264a43eb48f9b3080d53a9bda819ab45bf56b8039dc606ac \
|
||||||
|
--hash=sha256:e9102043a81cdc8b7c8032ff4bce39f6229e4ac39cb2010946c912eeb84e2cb6 \
|
||||||
|
--hash=sha256:f5cb2683367e32da6a256b60929a3af9c29c212b5091cf5bace9358d03011bf5
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -1,5 +1,5 @@
|
|||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
|
||||||
setup(name='personal_api',
|
setup(name='personal_api',
|
||||||
packages=["app"],
|
packages=["personal_api"],
|
||||||
)
|
)
|
||||||
|
|||||||
6
tests.py
6
tests.py
@@ -1,13 +1,11 @@
|
|||||||
"""
|
"""
|
||||||
TODO: set up a test db or mocks instead of relying there being at least one item available in most of the 'get' tests.
|
TODO: set up a test db or mocks instead of relying there being at least one item available in most of the 'get' tests.
|
||||||
"""
|
"""
|
||||||
from pytest import skip, mark
|
|
||||||
from starlette.testclient import TestClient
|
from starlette.testclient import TestClient
|
||||||
|
|
||||||
from app.crud import create_thing
|
|
||||||
from app.models import Resume, Availability, Project, Post
|
|
||||||
from config import PERSONAL_API_USERNAME, PERSONAL_API_PASS
|
from config import PERSONAL_API_USERNAME, PERSONAL_API_PASS
|
||||||
from app.main import app
|
from personal_api.main import app
|
||||||
|
from personal_api.models import Resume, Availability, Project, Post
|
||||||
|
|
||||||
client = TestClient(app)
|
client = TestClient(app)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user