Exemple #1
0
    def test_not_exists(self):
        mapping = {"EXISTS": True}
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")

            speckenv.env("EXISTS", mapping=mapping, warn=True)
            speckenv.env("NOT", mapping=mapping, warn=True)

            self.assertEqual(len(w), 1)
            self.assertIn("Key 'NOT' not available in environment",
                          f"{w[0].message}")
Exemple #2
0
def _srv_env(conn, path):
    mapping = {}

    with tempfile.NamedTemporaryFile() as f:
        conn.get(path, f.name)
        speckenv.read_speckenv(f.name, mapping=mapping)

    return lambda *a, **kw: speckenv.env(*a, **kw, mapping=mapping)
Exemple #3
0
def default_env(*args, **kwargs):
    if not getattr(default_env, "_loaded", False):
        path = os.path.join(os.path.expanduser("~"), ".box.env")
        if os.path.isfile(path):
            speckenv.read_speckenv(path)

        default_env._loaded = True

    return speckenv.env(*args, **kwargs)
Exemple #4
0
def patch_dj_email_url():
    if "dj_email_url" in sys.modules:
        return

    m = ModuleType("dj_email_url")
    m.config = lambda name="EMAIL_URL", default="smtp://": django_email_url(
        env(name, default=default, warn=True))
    m.parse = django_email_url
    sys.modules["dj_email_url"] = m
Exemple #5
0
def patch_django_cache_url():
    if "django_cache_url" in sys.modules:
        return

    m = ModuleType("django_cache_url")
    m.config = lambda name="CACHE_URL": django_cache_url(
        env(name, default="locmem://", warn=True))
    m.parse = django_cache_url
    sys.modules["django_cache_url"] = m
Exemple #6
0
def patch_dj_database_url():
    if "dj_database_url" in sys.modules:
        return

    m = ModuleType("dj_database_url")
    m.config = lambda name="DATABASE_URL": django_database_url(
        env(name, required=True))
    m.parse = django_database_url
    sys.modules["dj_database_url"] = m
Exemple #7
0
def remote_env(*args, **kwargs):
    global REMOTE_ENV

    if REMOTE_ENV is None:
        REMOTE_ENV = {}
        with TemporaryDirectory() as d:
            get("%(box_domain)s/.env" % env, d)
            speckenv.read_speckenv(os.path.join(d, ".env"), mapping=REMOTE_ENV)

    kwargs["mapping"] = REMOTE_ENV
    return speckenv.env(*args, **kwargs)
Exemple #8
0
def default_env(*args, **kwargs):
    if not getattr(default_env, '_loaded', False):
        path = os.path.join(
            os.path.expanduser('~'),
            '.box.env',
        )
        if os.path.isfile(path):
            speckenv.read_speckenv(path)

        default_env._loaded = True

    return speckenv.env(*args, **kwargs)
Exemple #9
0
    def test_custom_mapping(self):
        mapping = {}
        with tempfile.NamedTemporaryFile() as f:
            f.write(b"""
CUSTOM_MAPPING=yes
""")

            f.seek(0)

            speckenv.read_speckenv(f.name, mapping=mapping)

        self.assertNotIn("CUSTOM_MAPPING", os.environ)

        self.assertEqual(speckenv.env("CUSTOM_MAPPING", mapping=mapping),
                         "yes")
Exemple #10
0
    def test_read(self):
        # Bare value
        self.assertEqual(os.environ.get("ALLOWED_HOSTS"), "['*']")

        # literal_eval'ed value
        self.assertEqual(speckenv.env("ALLOWED_HOSTS"), ["*"])
        self.assertEqual(speckenv.env("ALLOWED_HOSTS", coerce=tuple), ("*", ))

        # First not-commented out value
        self.assertEqual(speckenv.env("COMMENTED"), "no")

        # Not defined values
        self.assertEqual(speckenv.env("UNDEFINED"), None)
        self.assertIs(speckenv.env("UNDEFINED", coerce=bool), False)
        self.assertRaises(Exception, speckenv.env, "UNDEFINED", required=True)

        # Defaults
        self.assertEqual(speckenv.env("DEFAULT"), None)
        self.assertEqual(speckenv.env("DEFAULT", default=42), 42)
        self.assertEqual(speckenv.env("COMMENTED", default=42), "no")
        self.assertIs(speckenv.env("COMMENTED", default="bla", coerce=bool),
                      True)

        self.assertNotIn("NO_EQUAL_SIGN", os.environ)
Exemple #11
0
import os
import sys
import types
from collections import defaultdict

from django.utils.translation import gettext_lazy as _

import dj_database_url
import dj_email_url
from speckenv import env

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

SECRET_KEY = env("SECRET_KEY", required=True)
DEBUG = env("DEBUG", default=bool({"runserver"}.intersection(sys.argv)))
TESTING = env("TESTING", default="test" in sys.argv)
LIVE = env("LIVE", default=False)
ALLOWED_HOSTS = env("ALLOWED_HOSTS", default=[])
ADMINS = MANAGERS = [("Matthias Kestenholz", "*****@*****.**")]
DEFAULT_FROM_EMAIL = SERVER_EMAIL = "*****@*****.**"
BCC = env("BCC", default=[row[1] for row in MANAGERS])

DEBUG_TOOLBAR = DEBUG and not TESTING

INSTALLED_APPS = [
    a for a in [
        "workbench",
        "django.contrib.admin",
        "django.contrib.auth",
        "django.contrib.contenttypes",
        "django.contrib.sessions",
Exemple #12
0
from datetime import datetime
import re
import requests
from speckenv import read_speckenv, env

read_speckenv()
token = env('TOKEN', required=True)
groups = [group.split(':') for group in env('GROUPS', required=True).split()]


def users():
    response = requests.get(
        'https://slack.com/api/users.list',
        params={
            'token': token,
            'limit': 1000,
            'presence': 'false',
        },
    ).json()

    return {member['id']: member['name'] for member in response['members']}


def fetch(channel):
    response = requests.get(
        'https://slack.com/api/conversations.history',
        params={
            'token': token,
            'channel': channel,
            'count': 1000,
            'oldest': datetime.now().timestamp() - 86400 - 3600,
Exemple #13
0
 def test_int_as_string(self):
     self.assertEqual(speckenv.env("COMMENT_INT", coerce=str), "42")
Exemple #14
0
 def test_inline_comment_int(self):
     # Works because ast.literal_eval also knows how to handle comments...
     self.assertEqual(speckenv.env("COMMENT_INT"), 42)
Exemple #15
0
 def test_inline_comment_str_quoted(self):
     """Line looks like it has a comment, but we cannot be sure."""
     self.assertEqual(speckenv.env("COMMENT_STR_QUOTED"), "value  # TEST")
Exemple #16
0
def _local_env(path=".env"):
    mapping = {}
    speckenv.read_speckenv(config.base / path, mapping=mapping)

    return lambda *a, **kw: speckenv.env(*a, **kw, mapping=mapping)