Skip to content

Commit

Permalink
Add migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
Giacomo Licari committed Feb 28, 2024
1 parent 2ef35b6 commit 488116b
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 36 deletions.
6 changes: 3 additions & 3 deletions api/api/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

from flask import Flask
from flask_cors import CORS
from flask_migrate import Migrate

from .routes import apiv1
from .services import Cache, Web3Singleton
from .services.database import db, migrate
from .services.database import db


def setup_logger(log_level):
Expand Down Expand Up @@ -39,8 +40,7 @@ def create_app():

with app.app_context():
db.init_app(app)
migrate.init_app(app, db)
db.create_all() # Create database tables for our data models
Migrate(app, db)

# Initialize Web3 class
w3 = Web3Singleton(app.config['FAUCET_RPC_URL'], app.config['FAUCET_PRIVATE_KEY'])
Expand Down
6 changes: 2 additions & 4 deletions api/api/services/database.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import sqlite3

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
migrate = Migrate()


class Database:
Expand Down Expand Up @@ -68,8 +66,8 @@ def delete(self, commit=True):
class AccessKey(BaseModel):
__tablename__ = "access_keys"
access_key_id = db.Column(db.String(16), primary_key=True)
secret_access_key = db.Column(db.String(32))
enabled = db.Column(db.Boolean(), default=True)
secret_access_key = db.Column(db.String(32), nullable=False)
enabled = db.Column(db.Boolean(), default=True, nullable=False)

def __repr__(self):
return f"<Access Key {self.access_key_id}>"
32 changes: 32 additions & 0 deletions api/migrations/versions/71441c34724e_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
"""empty message
Revision ID: 71441c34724e
Revises:
Create Date: 2024-02-28 14:11:13.601403
"""
import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = '71441c34724e'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('access_keys',
sa.Column('access_key_id', sa.String(length=16), nullable=False),
sa.Column('secret_access_key', sa.String(length=32), nullable=False),
sa.Column('enabled', sa.Boolean(), nullable=False),
sa.PrimaryKeyConstraint('access_key_id')
)
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('access_keys')
# ### end Alembic commands ###
14 changes: 14 additions & 0 deletions api/scripts/run_migrations.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash

set -x

# DB MIGRATIONS:
FLASK_APP=api FAUCET_DATABASE_URI=sqlite:///:memory python3 -m flask db init # only the first time we initialize the DB
FLASK_APP=api FAUCET_DATABASE_URI=sqlite:///:memory python3 -m flask db migrate
# Reflect migrations onto the database:
# FLASK_APP=api python3 -m flask db upgrade

# Valid SQLite URL forms are:
# sqlite:///:memory: (or, sqlite://)
# sqlite:///relative/path/to/file.db
# sqlite:////absolute/path/to/file.db
23 changes: 0 additions & 23 deletions api/scripts/run_test_env.sh

This file was deleted.

2 changes: 2 additions & 0 deletions api/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os

import pytest
from flask_migrate import upgrade
from temp_env_var import (CAPTCHA_TEST_RESPONSE_TOKEN, ERC20_TOKEN_ADDRESS,
ERC20_TOKEN_AMOUNT, NATIVE_TOKEN_ADDRESS,
NATIVE_TOKEN_AMOUNT, NATIVE_TRANSFER_TX_HASH,
Expand Down Expand Up @@ -30,6 +31,7 @@ def app(self, mocker):
mocker = self._mock(mocker, TEMP_ENV_VARS)
app = self._create_app()
with app.app_context():
upgrade()
yield app

@pytest.fixture
Expand Down
2 changes: 1 addition & 1 deletion api/tests/temp_env_var.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
'FAUCET_PRIVATE_KEY': token_bytes(32).hex(),
'FAUCET_RATE_LIMIT_TIME_LIMIT_SECONDS': '10',
'FAUCET_ENABLED_TOKENS': json.dumps(FAUCET_ENABLED_TOKENS),
'FAUCET_DATABASE_URI': 'sqlite:///', # run in-memory
'FAUCET_DATABASE_URI': 'sqlite:///:memory', # run in-memory
'CAPTCHA_SECRET_KEY': CAPTCHA_TEST_SECRET_KEY
}

Expand Down
8 changes: 3 additions & 5 deletions api/tests/test_database.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
from conftest import BaseTest
# from mock import patch
from temp_env_var import (CAPTCHA_TEST_RESPONSE_TOKEN, ERC20_TOKEN_ADDRESS,
ERC20_TOKEN_AMOUNT, NATIVE_TOKEN_ADDRESS,
NATIVE_TOKEN_AMOUNT, NATIVE_TRANSFER_TX_HASH,
TEMP_ENV_VARS, TOKEN_TRANSFER_TX_HASH, ZERO_ADDRESS)

from api.services.database import AccessKey
from api.utils import generate_access_key


class TestDatabase(BaseTest):

# db.create_all() # Create database tables for our data models

def test_models(self, client):
access_key_id, secret_access_key = generate_access_key()
assert len(access_key_id) == 16
Expand Down

0 comments on commit 488116b

Please sign in to comment.