Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
23 changes: 19 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,27 @@ jobs:
test:
runs-on: ubuntu-latest
services:
redis:
image: redis:latest
ports:
- 6379:6379
postgres:
image: postgres:latest
image: bitnami/postgresql:latest
env:
POSTGRES_DB: backslash
POSTGRES_PASSWORD: backslash
POSTGRES_USER: backslash
POSTGRESQL_DATABASE: backslash
POSTGRESQL_PASSWORD: backslash
POSTGRESQL_USERNAME: backslash
POSTGRESQL_FSYNC: "off"
ports:
- 5432:5432
options: >-
--mount type=tmpfs,destination=/var/lib/postgresql/data
--health-cmd "pg_isready -d backslash -U backslash -p 5432"
--health-interval 10s
--health-timeout 5s
--health-retries 5


steps:
- name: Install dependencies
run: |
Expand All @@ -26,3 +39,5 @@ jobs:
uses: actions/checkout@v2
- run: pipenv install -d
- run: pipenv run manage db upgrade
- run: pipenv run manage unittest
- run: pipenv run manage
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,8 @@ webapp/tmp
tests/.cache
flycheck_*
/.pytest_cache

# vscode
.vscode
# virtualenv
.venv
12 changes: 6 additions & 6 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ url = "https://pypi.org/simple"
verify_ssl = true

[packages]
Flask = ">=0.10.1"
Flask = "<2.0"
Flask-Login = ">=0.3.0,<0.4.0"
Flask-Mail = "*"
Flask-Migrate = ">=1.3.0"
Flask-RESTful = "*"
Flask-SQLAlchemy = ">=2.2"
Flask-Security = ">=1.7.5"
SQLAlchemy = ">=1.1.0"
Flask-Security = ">=3.0.0"
SQLAlchemy = ">=1.1.0,<1.3"
URLObject = "*"
Werkzeug = ">=0.10.2"
alembic = ">=0.7.3"
celery = {extras = ["redis"], version = "*"}
alembic = ">=0.7.3,<1.3"
celery = {extras = ["redis"], version = "<5.0.0"}
click = "<9"
dateparser = "*"
"dogpile.cache" = "*"
Expand All @@ -26,7 +26,7 @@ flux = ">=1.3.0"
google-api-python-client = "*"
gunicorn = "*"
inflect = "*"
itsdangerous = "*"
itsdangerous = "<2.0"
logbook = "*"
munch = "*"
"oauth2client" = "*"
Expand Down
773 changes: 337 additions & 436 deletions Pipfile.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions flask_app/app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ SECURITY_PASSWORD_HASH: sha512_crypt
SECURITY_BLUEPRINT_NAME: auth
# Change these settings to your own app credentials
SQLALCHEMY_TRACK_MODIFICATIONS: false
SQLALCHEMY_DATABASE_URI: postgresql://backslash:backslash@localhost:5432/backslash

MAX_WARNINGS_PER_ENTITY: 50
MAX_QUERY_PAGE_SIZE: 2000
Expand Down
17 changes: 8 additions & 9 deletions flask_app/blueprints/api/metadata.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
from flask import abort
from flask_simple_api import error_abort
import requests

from sqlalchemy import func
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.exc import NoResultFound

from flask import abort

from flask_simple_api import error_abort

from ...models import Session, Test, db, SessionMetadata, TestMetadata
from ...models import Session, SessionMetadata, Test, TestMetadata, db
from .blueprint import API


Expand Down Expand Up @@ -73,7 +70,8 @@ def _get_metadata_model(entity_type):
def add_test_metadata(id: int, metadata: dict):
try:
test = Test.query.filter(Test.id == id).one()
test.metadata_objects.append(TestMetadata(metadata_item=metadata))
for key, value in metadata.items():
test.metadatas.append(TestMetadata(key=key, metadata_item=value))
except NoResultFound:
abort(requests.codes.not_found)
db.session.commit()
Expand All @@ -83,8 +81,9 @@ def add_test_metadata(id: int, metadata: dict):
def add_session_metadata(id: int, metadata: dict):
try:
session = Session.query.filter(Session.id == id).one()
session.metadata_objects.append(
SessionMetadata(metadata_item=metadata))
for key, value in metadata.items():
session.metadata_items.append(
SessionMetadata(key=key, metadata_item=value))
except NoResultFound:
abort(requests.codes.not_found)
db.session.commit()
2 changes: 1 addition & 1 deletion manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ def unittest():

def _run_unittest():
subprocess.check_call(
[sys.executable, '-m', "pytest", "tests/", "--cov=flask_app", "--cov-report=html"], cwd=from_project_root())
[sys.executable, '-m', "pytest", "tests/", "--cov=flask_app", "--cov-report=html", "--durations=20"], cwd=from_project_root())


@cli.command()
Expand Down
22 changes: 22 additions & 0 deletions tests/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,25 @@ def test_create_session_with_metadata(client, metadata):
def test_add_metadata_nonexistent_session(nonexistent_session):
with raises_not_found():
nonexistent_session.set_metadata('foo', 'bar')


def test_add_test_metadata(started_test):
"""Add test metadata to a started test"""
new_metadata = {"foo": "bar", "baz": 1}
params = {"id": started_test.id, "metadata": new_metadata}
started_test.client.api.call_function("add_test_metadata", params)
updated_metadata = started_test.get_metadata()
for key, value in new_metadata.items():
assert updated_metadata[key] == value



def test_add_session_metadata(started_session):
"""Add session metadata to a started session"""
new_metadata = {"foo": "bar", "baz": 1}
params = {"id": started_session.id, "metadata": new_metadata}
started_session.client.api.call_function("add_session_metadata", params)
updated_metadata = started_session.get_metadata()
for key, value in new_metadata.items():
assert updated_metadata[key] == value