Skip to content

Commit a093827

Browse files
Add configuration (12factor.net)
1 parent 6548240 commit a093827

File tree

8 files changed

+64
-2
lines changed

8 files changed

+64
-2
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ install:
99
- pip install -r requirements.txt
1010

1111
script:
12-
- py.test tvseries/*
12+
- py.test .
1313

contrib/env-sample

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
SECRET_KEY=your_secret_here_change_this_phrase
2+
SERVER_NAME=your_server_name_here_change_this_phrase
3+
DATABASE_URI=postgresql://username:password@address:port/database_name

contrib/env-test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
SECRET_KEY=your_secret_here_change_this_phrase
2+
SERVER_NAME=your_server_name_here_change_this_phrase
3+
DATABASE_URI=sqlite:///tvseries-test.sqlite3

contrib/generate_secret_key.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import random
2+
3+
"""
4+
Some parts of this code were extracted from Django framework
5+
6+
https://github.com/django/django/blob/master/django/utils/crypto.py
7+
8+
"""
9+
10+
random = random.SystemRandom()
11+
12+
13+
def get_random_string(length=12,
14+
allowed_chars='abcdefghijklmnopqrstuvwxyz'
15+
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
16+
"""
17+
Returns a securely generated random string.
18+
The default length of 12 with the a-z, A-Z, 0-9 character set returns
19+
a 71-bit value. log_2((26+26+10)^12) =~ 71 bits
20+
"""
21+
return ''.join(random.choice(allowed_chars) for i in range(length))
22+
23+
24+
chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
25+
print(get_random_string(50, chars))

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ Flask==0.11.1
22
Flask-Script==2.0.5
33
Flask-SQLAlchemy==2.1
44
pytest-flask==0.10.0
5+
python-decouple==3.0

tvseries/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from flask import Flask
22
from flask_sqlalchemy import SQLAlchemy
33

4+
from tvseries import config
5+
46
app = Flask(__name__)
5-
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tvseries.sqlite3'
7+
app.config.from_object(config.DevelopmentConfig)
8+
69
db = SQLAlchemy(app)
710

811
from tvseries.core import views # noqa

tvseries/config.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from decouple import config
2+
3+
4+
class BaseConfig(object):
5+
SITE_NAME = 'Flask Tutorial'
6+
SECRET_KEY = config('SECRET_KEY')
7+
SERVER_NAME = config('SERVER_NAME')
8+
SQLALCHEMY_DATABASE_URI = config('DATABASE_URI')
9+
DEBUG = False
10+
TESTING = False
11+
12+
13+
class DevelopmentConfig(BaseConfig):
14+
DEBUG = True
15+
16+
17+
class TestConfig(BaseConfig):
18+
SECRET_KEY = 'teste123'
19+
SERVER_NAME = '127.0.0.1:5000'
20+
SQLALCHEMY_DATABASE_URI = 'sqlite:///tvseries-test.sqlite3'
21+
TESTING = True
22+
23+
24+
class ProductionConfig(BaseConfig):
25+
pass

tvseries/tests/test_core.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22

33
from tvseries.core.models import TVSerie
4+
from tvseries.config import TestConfig
45

56

67
@pytest.mark.usefixtures('client_class')
@@ -9,6 +10,7 @@ class TestCore:
910
@pytest.fixture
1011
def app(self):
1112
from tvseries import app
13+
app.config.from_object(TestConfig)
1214
return app
1315

1416
def test_get_home(self, db):

0 commit comments

Comments
 (0)