Passed
Push — master ( 19a00d...c2a7ba )
by Jace
01:21
created

get_config()   B

Complexity

Conditions 5

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
dl 0
loc 9
ccs 5
cts 5
cp 1
crap 5
rs 8.5454
c 1
b 0
f 0
1 1
import os
2 1
import logging
3
4 1
5
class Config:
6
7 1
    ENV = None
8
9
    PATH = os.path.abspath(os.path.dirname(__file__))
10 1
    ROOT = os.path.dirname(PATH)
11
    DEBUG = False
12 1
    THREADED = False
13 1
14 1
    # Constants
15 1
    GITHUB_SLUG = "jacebrowning/memegen"
16
    GITHUB_URL = "https://github.com/{}".format(GITHUB_SLUG)
17
    GITHUB_BASE = "https://raw.githubusercontent.com/{}/master/".format(GITHUB_SLUG)
18 1
    CHANGES_URL = GITHUB_BASE + "CHANGELOG.md"
19 1
    CONTRIBUTING_URL = GITHUB_BASE + "CONTRIBUTING.md"
20 1
21 1
    # Variables
22 1
    BUGSNAG_API_KEY = os.getenv('BUGSNAG_API_KEY')
23
    FACEBOOK_APP_ID = 'localhost'
24
    FACEBOOK_IMAGE_HEIGHT = 492
25 1
    FACEBOOK_IMAGE_WIDTH = 940
26 1
    GOOGLE_ANALYTICS_TID = 'localhost'
27 1
    GOOGLE_ANALYTICS_URL = "http://www.google-analytics.com/collect"
28 1
    LOG_LEVEL = getattr(logging, os.getenv('LOG_LEVEL', 'INFO'))
29 1
    REGENERATE_IMAGES = os.getenv('REGENERATE_IMAGES')
30 1
    REMOTE_TRACKING_URL = os.getenv('REMOTE_TRACKING_URL')
31 1
    TWITTER_IMAGE_HEIGHT = 440
32 1
    TWITTER_IMAGE_WIDTH = 880
33 1
    WATERMARK_OPTIONS = os.getenv('WATERMARK_OPTIONS', "").split(',')
34 1
35 1
36
class ProductionConfig(Config):
37
38 1
    ENV = 'production'
39
40
    FACEBOOK_APP_ID = os.getenv('FACEBOOK_APP_ID')
41 1
    GOOGLE_ANALYTICS_TID = os.getenv('GOOGLE_ANALYTICS_TID')
42
43 1
44 1
class StagingCongif(ProductionConfig):
45
46
    ENV = 'staging'
47 1
48
49
class LocalConfig(Config):
50 1
51
    ENV = 'local'
52 1
53 1
    DEBUG = True
54
55 1
    LOG_LEVEL = logging.DEBUG
56 1
    WATERMARK_OPTIONS = ['localhost'] + Config.WATERMARK_OPTIONS
57
58
59 1
class TestConfig(LocalConfig):
60
61
    ENV = 'test'
62 1
63
    TESTING = True
64 1
65
    WATERMARK_OPTIONS = ['test', 'memegen.test', 'werkzeug']
66 1
67 1
68
def get_config(name):
69
    assert name, "No configuration specified"
70 1
71 1
    for config in _subclasses(Config):
72
        if config.ENV == name:
73 1
            return config
74 1
75 1
    assert False, "No matching configuration"
76
    return None
77 1
78
79
def _subclasses(cls):
80
    yield from cls.__subclasses__()
81
    yield from (g for s in cls.__subclasses__() for g in _subclasses(s))
82