def test_env_nonexist_bool(self): """Test env_bool returns default with non-existant env var""" k = 'EXAMPLE_NOEXIST' if k in os.environ: del os.environ[ k] # Ensure the env var we're testing definitely does not exist. self.assertIsNone(helpers.env_bool(k)) self.assertEqual(helpers.env_bool(k, 'error'), 'error')
def test_env_bool_true(self): """Test env_bool returns True boolean with valid env var""" k = 'EXAMPLE_EXIST' for v in self.truthy: os.environ[k] = str(v) self.assertTrue(helpers.env_bool(k, 'fail'), msg=f'env_bool({v}) === True')
def test_env_bool_false(self): """Test env_bool returns False boolean with valid env var""" k = 'EXAMPLE_EXIST' for v in self.falsey: os.environ[k] = str(v) self.assertFalse(helpers.env_bool(k, 'fail'), msg=f'env_bool({v}) === False')
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ import logging import unittest from privex.loghelper import LogHelper from privex.helpers import env_bool from privex.rpcemulator.base import Emulator from tests.test_bitcoin import TestBitcoinEmulator Emulator.use_coverage = True if env_bool('DEBUG', False) is True: LogHelper('privex.rpcemulator', level=logging.DEBUG).add_console_handler(logging.DEBUG) else: LogHelper('privex.rpcemulator', level=logging.CRITICAL) # Silence non-critical log messages Emulator.quiet = True # Disable HTTP logging if __name__ == '__main__': unittest.main()
""" Copyright:: +===================================================+ | © 2020 Privex Inc. | | https://www.privex.io | +===================================================+ | | | Privex's Random IOTA Tools | | License: X11/MIT | | | | Core Developer(s): | | | | (+) Chris (@someguy123) [Privex] | | | +===================================================+ Privex's Random IOTA Tools Copyright (c) 2020 Privex Inc. ( https://www.privex.io ) """ from privex.helpers import env_bool from os import getenv as env IOTA_HOST = env('IOTA_HOST', 'http://localhost:14265') RAW_MODE = env_bool('RAW_MODE', False)
'amount': '0.100 GOLOS', 'memo': 'testing' } ]], extensions=[], signatures=[ '1f1a0212f7b9fe263acaeadf1ec127000dc234c413b543e3c268d251e8d8205b95746f3aa102805eb85d5ee72bf1c80b7' + '14fadf081d29138a6ddab085dafa28604' ]), 'txid': 'c901c52daf57b60242d9d7be67f790e023cf2780', }] IGNORE_KEYS_FIND = ['transaction_id', 'block_num', 'transaction_num'] DEBUG = env_bool('DEBUG', False) lh = LogHelper('golos', handler_level=logging.DEBUG if DEBUG else logging.CRITICAL) lh.add_console_handler() log = lh.get_logger() class GolosTestCase(unittest.TestCase): def setUp(self): self.golos = Api(nodes=NODES, report=DEBUG) def test_get_account(self): """Testing Api.get_accounts returns valid account dictionaries""" a = self.golos.get_accounts(TEST_ACCOUNTS) self.assertIs(type(a), list)
import json from dotenv import load_dotenv from flask import Flask from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy from getenv import env from pika.adapters.blocking_connection import BlockingChannel from privex.loghelper import LogHelper from privex.helpers import env_bool, empty, settings as hlp_settings, Git, AttribDictable, env_int load_dotenv() cf = {} DEBUG = cf['DEBUG'] = env_bool('DEBUG', False) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ENABLE_LG = env_bool('ENABLE_LG', True) """Enable the looking glass (mtr / ping) application (lookingglass) - Default: True (enabled)""" ENABLE_PEERAPP = env_bool('ENABLE_PEERAPP', True) """Enable the peer information application (peerapp) - Default: True (enabled)""" DEFAULT_API_LIMIT = env_int('VUE_APP_DEFAULT_API_LIMIT', 100) """Default for ``limit`` field on API queries.""" MAX_API_LIMIT = env_int('VUE_APP_MAX_API_LIMIT', 10000) """Max value allowed for ``limit`` field on API queries.""" HOT_LOADER = env_bool('HOT_LOADER', False)
import geoip2.database import sys import subprocess import shlex import operator import time import logging from dotenv import load_dotenv from socket import gethostbyaddr, herror from privex.helpers import env_bool from privex.loghelper import LogHelper from os import getenv as env load_dotenv() use_docker = env_bool('USE_DOCKER', True) docker_name = env('DOCKER_NAME', 'seed') _lh = LogHelper('privex.steempeers', handler_level=logging.DEBUG) _lh.add_console_handler() log = _lh.get_logger() # If USE_DOCKER is True, obtain the PID of the docker container, then use nsenter # to run netstat inside of the containers network stack if use_docker: cmd = shlex.split("docker inspect -f '{{.State.Pid}}' " + docker_name) pid = "" # print(cmd) with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc:
import os import logging from os import getenv as env from os.path import join from privex.helpers import env_bool from dotenv import load_dotenv # from balancer.app import f cf = {} BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) load_dotenv() DEBUG = cf['DEBUG'] = env_bool('DEBUG', False) CONSOLE_LOG_LEVEL = env('LOG_LEVEL', None) CONSOLE_LOG_LEVEL = logging.getLevelName( str(CONSOLE_LOG_LEVEL).upper()) if CONSOLE_LOG_LEVEL is not None else None if CONSOLE_LOG_LEVEL is None: CONSOLE_LOG_LEVEL = logging.DEBUG if cf['DEBUG'] else logging.INFO DBG_LOG, ERR_LOG = join(BASE_DIR, 'logs', 'debug.log'), join(BASE_DIR, 'logs', 'error.log') all_plugins = [ 'condenser_api', 'network_broadcast_api', 'rc_api', 'account_by_key', 'database_api', 'account_history_api', 'block_api', 'market_history_api' ]
DAY = HOUR * 24 WEEK = DAY * 7 MONTH = DAY * 30 YEAR = DAY * 365 cf = DictObject() APP_DIR = Path(__file__).parent.expanduser().resolve() TEMPLATES_DIR = APP_DIR / 'templates' BASE_DIR = APP_DIR.parent ####################################### # # General configuration # ####################################### cf['DEBUG'] = DEBUG = env_bool( 'DEBUG', True if env('FLASK_ENV') == 'development' else False) HOST = cf['HOST'] = env('HOST', '127.0.0.1') PORT = cf['PORT'] = env_int('PORT', 5111) cf['API_ONLY'] = env_bool('API_ONLY', False) """If set to ``True``, will always return JSON, never HTML pages.""" USE_IP_HEADER = cf['USE_IP_HEADER'] = env_bool('USE_IP_HEADER', True) """If set to False, will obtain the IP from request.remote_addr instead of the header set in IP_HEADER""" IP_HEADER = cf['IP_HEADER'] = env('IP_HEADER', 'X-REAL-IP') """The name of the header that will be passed to Flask containing the IP address of the user""" USE_FAKE_IPS = env_bool('USE_FAKE_IPS', DEBUG) """ USE_FAKE_IPS causes the app to always use FAKE_V4 and FAKE_V6 as the detected client's v4/v6 IPs, which aids
| (+) Chris (@someguy123) [Privex] | | (+) Kale (@kryogenic) [Privex] | | | +===================================================+ Official Repo: https://github.com/Privex/collation-fixer """ from dotenv import load_dotenv from os import getenv as env from privex.helpers import env_int, env_bool load_dotenv() DEBUG = env_bool('DEBUG', False) QUIET = env_bool('QUIET', False) LOG_LEVEL = env('LOG_LEVEL', 'DEBUG' if DEBUG else 'WARNING') if QUIET: LOG_LEVEL = env('LOG_LEVEL', 'ERROR') DB_HOST = env('DB_HOST', 'localhost') DB_USER = env('DB_USER', env('DB_USERNAME', 'root')) DB_PASS = env('DB_PASS', env('DB_PASSWORD', '')) DB_PORT = env_int('DB_PORT', 3306) DB_NAME = env('DB_NAME')
raise FileNotFoundError( f"File/folder '{filename}' was not found (abs path)") return None return filename for b in SEARCH_PATHS: f = abspath(expanduser(join(b, filename))) if exists(f): return f if throw: raise FileNotFoundError( f"File/folder '{filename}' was not found (rel path search)") return None DEBUG = env_bool('DEBUG', False) verbose: bool = env_bool('VERBOSE', DEBUG) quiet: bool = env_bool('QUIET', False) _LOG_DIR = env('LOG_DIR', join(BASE_DIR, 'logs')) try: LOG_DIR = abspath(join(find_parent(_LOG_DIR), basename(_LOG_DIR))) except FileNotFoundError as e: print( f" [!!!] WARNING: Failed to validate LOG_DIR '{_LOG_DIR}' - could not verify parent folder exists." f"Exception was: {type(e)} {str(e)}", file=sys.stderr) print( f" [!!!] Setting LOG_DIR to original value - may be fixed when log folder + containing folders are auto-created.", file=sys.stderr)
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) from privex.loghelper import LogHelper # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Deal with the issue of conflicting dotenv packages by trying both methods... ENV_FILE = str(BASE_DIR / '.env') try: dotenv.load_dotenv(ENV_FILE) except AttributeError: dotenv.read_dotenv(ENV_FILE) # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env_bool('DEBUG', False) # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = env('SECRET_KEY', None) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ def _suggest_secret(): _abs_env = BASE_DIR / '.env' print( "\nPlease generate a secure random string used to encrypt sensitive data such as user sessions" ) print( f"Place the following line into the file {_abs_env!s} - for production we recommend generating it by hand."
import pika import redis from dotenv import load_dotenv from flask import Flask from getenv import env from pika.adapters.blocking_connection import BlockingChannel from privex.loghelper import LogHelper from privex.helpers import env_bool load_dotenv() flask = Flask(__name__) cf = flask.config DEBUG = flask.config['DEBUG'] = env_bool('DEBUG', False) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ENABLE_PEERSAPP = cf['ENABLE_PEERAPP'] = env_bool('ENABLE_PEERAPP', True) """Enable the peer information application (peerapp) - Default: True (enabled)""" ####################################### # # Logging Configuration # ####################################### # Log to console with CONSOLE_LOG_LEVEL, as well as output logs >=info / >=warning to respective files # with automatic daily log rotation (up to 14 days of logs) # Due to the amount of output from logging.DEBUG, we only log INFO and higher to a file. # Valid environment log levels (from least to most severe) are:
import redis import json from dotenv import load_dotenv from flask import Flask from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy from getenv import env from pika.adapters.blocking_connection import BlockingChannel from privex.loghelper import LogHelper from privex.helpers import env_bool, empty, settings as hlp_settings load_dotenv() cf = {} DEBUG = cf['DEBUG'] = env_bool('DEBUG', False) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ENABLE_LG = env_bool('ENABLE_LG', True) """Enable the looking glass (mtr / ping) application (lookingglass) - Default: True (enabled)""" ENABLE_PEERAPP = env_bool('ENABLE_PEERAPP', True) """Enable the peer information application (peerapp) - Default: True (enabled)""" ####################################### # # Logging Configuration # ####################################### # Log to console with CONSOLE_LOG_LEVEL, as well as output logs >=info / >=warning to respective files
SECRET_KEY = env('SECRET_KEY', None) if SECRET_KEY is None: print('Critical ERROR: No SECRET_KEY set in .env! Cannot continue.') print('Please generate a secure random string used to encrypt sensitive data such as user sessions') print( f"Place the following line into the file {join(BASE_DIR, '.env')} - for production we " f"recommend generating it by hand." ) print() print(f'SECRET_KEY={random_str(size=64)}') print() sys.exit() # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env_bool('DEBUG', False) ALLOWED_HOSTS = env_csv('ALLOWED_HOSTS', ['*']) if '*' in ALLOWED_HOSTS and not DEBUG: print("\n================================================================================================\n") print('WARNING: ALLOWED_HOSTS currently contains "*". You should configure ALLOWED_HOSTS in your .env') print("so that it's restricted to the domains / IPs you expect this app to be accessed from, e.g.\n") print(" ALLOWED_HOSTS=eos-history.example.com,eoshistory.example.net,1.2.3.4\n") print("\n================================================================================================\n") # Ignore the whitelist and allow CORS from anywhere CORS_ORIGIN_ALLOW_ALL = env_bool('CORS_ORIGIN_ALLOW_ALL', True) # A comma separated list of domains (must include each subdomain) that can send CORS requests # This is ignored if you don't change CORS_ORIGIN_ALLOW_ALL to False. CORS_ORIGIN_WHITELIST = env_csv('CORS_ORIGIN_WHITELIST', [])
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = dirname(dirname(dirname(abspath(__file__)))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'gna*8lm&p4n_g*@^e3$%x-wdgy+kp&^8v#&r(7*sk4q06mz!t$' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Ignore the whitelist and allow CORS from anywhere CORS_ORIGIN_ALLOW_ALL = env_bool('CORS_ORIGIN_ALLOW_ALL', True) # A comma separated list of domains (must include each subdomain) that can send CORS requests # This is ignored if you don't change CORS_ORIGIN_ALLOW_ALL to False. CORS_ORIGIN_WHITELIST = env_csv('CORS_ORIGIN_WHITELIST', []) # CORS_ORIGIN_WHITELIST = CORS_ORIGIN_WHITELIST.split(',') if CORS_ORIGIN_WHITELIST is not None else None REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', ) } EOS_NODE = env('EOS_NODE', 'https://eos.greymass.com') EOS_START_TYPE = "relative" """ EOS_START_TYPE can be either ``"relative"`` (meaning EOS_START_BLOCK is relative to the head block),
from dotenv import load_dotenv from privex.helpers import env_bool from os import getenv as env, path, getcwd from os.path import dirname, abspath load_dotenv() BASE_DIR = dirname(abspath(__file__)) USE_DOCKER = env_bool('USE_DOCKER', True) USE_GEOIP = env_bool('USE_GEOIP', True) DOCKER_NAME = env('DOCKER_NAME', 'seed') LOG_LEVEL = env('LOG_LEVEL', 'INFO') GEOIP_DIR = env('GEOIP_DIR', '/usr/share/GeoIP') GEOASN_NAME = env('GEOASN_NAME', 'GeoLite2-ASN.mmdb') GEOCITY_NAME = env('GEOCITY_NAME', 'GeoLite2-City.mmdb') GEOCITY, GEOASN = path.join(GEOIP_DIR, GEOCITY_NAME), path.join(GEOIP_DIR, GEOASN_NAME) search_geoip = [ '/usr/share/GeoIP', '/usr/lib/GeoIP', '/var/lib/GeoIP', '/usr/local/share/GeoIP', '/usr/local/var/GeoIP', '/var/GeoIP', path.join(getcwd(), 'GeoIP'), path.expanduser('~/GeoIP'),