Skip to content
This repository has been archived by the owner on Apr 20, 2020. It is now read-only.

Refactor backend for TCN compliance #12

Open
wants to merge 49 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
c9027fa
Add Dockerfile
assert-not-singularity Apr 2, 2020
f28f949
Create functions for creating blueprints with database object
Apr 4, 2020
2dc0d29
Use pymondo instead of flask_pymongo
Apr 4, 2020
44f6b7c
Create routes with new blueprint creation functions and pass database…
Apr 4, 2020
e9bf2af
Remove flask-pymongo as dependency
Apr 4, 2020
de0ec97
Remove flask-pymongo as dependency and add pymongo
Apr 4, 2020
8d240b9
Bind flask to 0.0.0.0 as host in Docker container
Apr 4, 2020
59f56b6
Add docker-compose file
Apr 4, 2020
446fe60
Adapt tests to new structure
Apr 4, 2020
4304090
Use environment variables in Docker files
Apr 4, 2020
d4b97bc
Merge branch docker into merge-download
Apr 4, 2020
b72437c
Merge branch docker into merge-download
Apr 4, 2020
4e019eb
Change directory structure
Apr 4, 2020
03100a6
Remove app directory
Apr 4, 2020
9c6d3cc
Rename persistence and model packages
Apr 4, 2020
41e9704
Format with black
Apr 4, 2020
d757314
Move test helper functions out of db module
Apr 4, 2020
13df4ce
Rename main.py to app.py
Apr 4, 2020
98e82c5
Add get_cases function
Apr 4, 2020
f3ba791
Add handler to get cases
Apr 4, 2020
00a9674
Move random_time_in_the_past to db module:
Apr 4, 2020
0e5eaea
Format with black
rettetdemdativ Apr 4, 2020
ca82bf8
Fix typing errors
rettetdemdativ Apr 5, 2020
68655b5
Format with black
rettetdemdativ Apr 5, 2020
15cd5df
Install mongodb in actions pipeline
rettetdemdativ Apr 5, 2020
64eafad
Merge pull request #11 from ito-org/actions-test
Apr 5, 2020
d80baff
Try testing with localhost mongodb
rettetdemdativ Apr 5, 2020
3cf5303
Use GitHub secret
rettetdemdativ Apr 5, 2020
fd4423e
Remove unused models and routes
rettetdemdativ Apr 10, 2020
f209855
Remove unused models and routes
rettetdemdativ Apr 10, 2020
5763732
Remove unused models and routes
rettetdemdativ Apr 10, 2020
f9da7e1
Rename ApiError to APIError
rettetdemdativ Apr 10, 2020
007d712
Remove unused database functions
rettetdemdativ Apr 10, 2020
d85cbc8
Add handlers for /report route and simplify initialization
rettetdemdativ Apr 10, 2020
8095ebb
Remove faulty imports
rettetdemdativ Apr 10, 2020
815507c
Apply formatting
rettetdemdativ Apr 10, 2020
542a796
Rename report_handler to report
rettetdemdativ Apr 10, 2020
8bbf0fe
Add provisional test for report handler
rettetdemdativ Apr 10, 2020
37abc48
Add return type for report function
rettetdemdativ Apr 10, 2020
168a289
Update GitHub actions workflow
rettetdemdativ Apr 10, 2020
8edf8a5
Create index for reportsig during initialization of DBConnection
Apr 13, 2020
818050c
Return an API error if reportsig already exists
Apr 13, 2020
ce1370c
Add test for duplicates
Apr 13, 2020
2b3e240
Do nothing if the reportsig already exists
Apr 13, 2020
f4add66
Merge pull request #13 from ito-org/reportsig-duplicates
Apr 13, 2020
23ece97
Apply formatting
Apr 13, 2020
3adfabd
Ignore type checking for pymongo.errors import
Apr 13, 2020
342e86a
Apply formatting
Apr 13, 2020
4187ed2
Fix test for duplicate reportsigs
Apr 13, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/pythonapp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,11 @@ jobs:
- name: Check types statically
run: poetry run mypy . --strict

- name: Install mongodb
run: sudo docker run --name mongo -d -p 27017:27017 mongo

- name: Test with pytest
run: poetry run pytest
env:
MONGO_URI: ${{ secrets.MongoUri }}
MONGO_URI: mongodb://localhost:27017
FLASK_ENV: testing
19 changes: 19 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM python:3.8

ARG INSTALL_PATH="/ito"

ENV PIP_DISABLE_PIP_VERSION_CHECK=on
ENV FLASK_ENV "development"
ENV MONGO_URI "mongodb://localhost:27017"

WORKDIR ${INSTALL_PATH}

RUN pip install poetry

COPY . ${INSTALL_PATH}/

RUN mv config.py.example config.py && \
poetry config virtualenvs.create false && \
poetry install

CMD poetry run flask run --host 0.0.0.0 --port=5001
25 changes: 23 additions & 2 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,25 @@
from flask import Flask
from app import create_app
import os
import json
from flask import Flask, Response, request
from db.db import DBConnection
from models.api import APIError

app: Flask = create_app()
app = Flask(__name__)
dbConn = DBConnection(os.environ.get("MONGO_URI"))


@app.route("/report", methods=["GET", "POST"])
def report() -> Response:
if request.method == "GET":
return Response(
json.dumps(dbConn.get_reportsigs()), 200, mimetype="application/json"
)
else:
data = request.get_json()
if "reportsig" not in data or "timestamp" not in data:
return APIError(400, "Missing values in request").as_response()
reportsig = data["reportsig"]
timestamp = data["timestamp"]
dbConn.insert_reportsig(reportsig, timestamp)
return Response(None, 200)
27 changes: 0 additions & 27 deletions app/__init__.py

This file was deleted.

35 changes: 0 additions & 35 deletions app/model/case.py

This file was deleted.

37 changes: 0 additions & 37 deletions app/model/contact.py

This file was deleted.

62 changes: 0 additions & 62 deletions app/persistence/db.py

This file was deleted.

Empty file removed app/routes/__init__.py
Empty file.
4 changes: 0 additions & 4 deletions app/routes/v0/__init__.py

This file was deleted.

21 changes: 0 additions & 21 deletions app/routes/v0/cases.py

This file was deleted.

20 changes: 0 additions & 20 deletions app/routes/v0/contacts.py

This file was deleted.

6 changes: 2 additions & 4 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from flask import Flask
import pytest # type: ignore

from app import create_app
from app import app as theapp


@pytest.fixture # type: ignore
def app() -> Flask:
app = create_app()
return app
return theapp
File renamed without changes.
23 changes: 23 additions & 0 deletions db/db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from flask import Flask
from pymongo import MongoClient # type: ignore
from typing import Optional, Dict, Any, Iterator, List
from uuid import uuid4, UUID
from datetime import datetime
import time
from random import randrange


class DBConnection:
db: Any

def __init__(self, hostUri: Optional[str]):
if hostUri is None:
hostUri = "mongodb://localhost:27017"
client = MongoClient(hostUri)
self.db = client.ito

def insert_reportsig(self, reportsig: str, timestamp: datetime) -> None:
self.db.reportsigs.insert_one({"reportsig": reportsig, "timestamp": timestamp})

def get_reportsigs(self) -> List[str]:
return list(self.db.reportsigs.find({}, {"_id": False}))
27 changes: 27 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
version: "3.7"
services:
mongodb:
image: mongo:latest
ports:
- 27017:27017
networks:
- ito-network

ito-upload:
build:
context: .
dockerfile: Dockerfile
environment:
- MONGO_URI=mongodb://mongodb:27017
ports:
- 5001:5001
networks:
- ito-network
depends_on:
- mongodb

networks:
ito-network:

volumes:
db-data:
1 change: 1 addition & 0 deletions models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .api import *
2 changes: 1 addition & 1 deletion app/model/__init__.py → models/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import Optional


class ApiError:
class APIError:
code: int
message: str

Expand Down
Loading