commit 28ee4f7197bb1f9714ee762715fad00e2292579f
parent eedb63212d8ff5efedeb07f70afd9ece41debf7f
Author: lash <dev@holbrook.no>
Date:   Fri, 21 Jan 2022 00:13:07 +0000
Add log disable and env var loglevel
Diffstat:
4 files changed, 50 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
@@ -1,16 +1,20 @@
+- 0.0.17
+	* Add loglevel environment variable
+- 0.0.16
+	* Allow query string in query url
 - 0.0.14
 	* Add option to skip ssl verification on rpc
 - 0.0.5
 	* Move eth code to separate package
-- 0.0.4-unreleased
+- 0.0.4
 	* Add pack tx from already signed tx struct
 	* Add http auth handling for jsonrpc connections
 	* Add customizable jsonrpc id generator (to allow for buggy server id handling)
-- 0.0.3-unreleased
+- 0.0.3
 	* Remove erc20 module (to new external package)
-- 0.0.2-unreleased
+- 0.0.2
 	* 
-- 0.0.1-unreleased
+- 0.0.1
 	* Add eth tx decode
 	* Add eth balance query with erc20 option
 	* Add eth checksum address
diff --git a/chainlib/cli/arg.py b/chainlib/cli/arg.py
@@ -139,8 +139,9 @@ class ArgumentParser(argparse.ArgumentParser):
         :type env: dict
         """
         if arg_flags & Flag.VERBOSE:
+            self.add_argument('--no-logs', dest='no_logs',action='store_true', help='Turn off all logging')
             self.add_argument('-v', action='store_true', help='Be verbose')
-            self.add_argument('-vv', action='store_true', help='Be more verbose')
+            self.add_argument('-vv', action='store_true', help='Be very verbose')
         if arg_flags & Flag.CONFIG:
             self.add_argument('-c', '--config', type=str, default=env.get('CONFINI_DIR'), help='Configuration directory')
             self.add_argument('-n', '--namespace', type=str, help='Configuration namespace')
diff --git a/chainlib/cli/config.py b/chainlib/cli/config.py
@@ -2,6 +2,7 @@
 import logging
 import os
 import sys
+import re
 
 # external imports
 import confini
@@ -102,14 +103,51 @@ class Config(confini.Config):
         :rtype: confini.Config
         :return: Processed configuation
         """
+        env_prefix = getattr(args, 'env_prefix', None)
+        env_prefix_str = env_prefix
+        if env_prefix_str == None:
+            env_prefix_str = ''
+        else:
+            env_prefix_str += '_'
+
+        env_loglevel_key_str = env_prefix_str + 'LOGLEVEL'
+        env_loglevel = os.environ.get(env_loglevel_key_str)
+
         if logger == None:
             logger = logging.getLogger()
 
-        if arg_flags & Flag.CONFIG:
+        if env_loglevel != None:
+            env_loglevel = env_loglevel.lower()
+            if env_loglevel == '0' or env_loglevel == 'no' or env_loglevel == 'none' or env_loglevel == 'disable' or env_loglevel == 'disabled' or env_loglevel == 'off':
+                logging.disable()
+            elif env_loglevel == '1' or env_loglevel == 'err' or env_loglevel == 'error':
+                logger.setLevel(logging.ERROR)
+            elif env_loglevel == '2' or env_loglevel == 'warning' or env_loglevel == 'warn':
+                logger.setLevel(logging.WARNING)
+            elif env_loglevel == '3' or env_loglevel == 'info':
+                logger.setLevel(logging.INFO)
+            else:
+                valid_level = False
+                try:
+                    num_loglevel = int(env_loglevel)
+                    valid_level = True
+                except:
+                    if env_loglevel == 'debug':
+                        valid_level = True
+
+                if not valid_level:
+                    raise ValueError('unknown loglevel {} set in environment variable {}'.format(env_loglevel, env_loglevel_key_str))
+
+                logger.setLevel(logging.DEBUG)
+
+
+        if arg_flags & Flag.VERBOSE:
             if args.vv:
                 logger.setLevel(logging.DEBUG)
             elif args.v:
                 logger.setLevel(logging.INFO)
+            if args.no_logs:
+                logging.disable()
    
         override_config_dirs = []
         config_dir = [cls.default_base_config_dir]
@@ -160,7 +198,6 @@ class Config(confini.Config):
         #        default_config_dir = default_parent_config_dir
         #    config_dir = default_config_dir
         #    override_config_dirs = []
-        env_prefix = getattr(args, 'env_prefix', None)
 
         config = confini.Config(config_dir, env_prefix=env_prefix, override_dirs=override_config_dirs)
         config.process()
diff --git a/setup.cfg b/setup.cfg
@@ -3,7 +3,7 @@ name=chainlib
 license=WTFPL2
 author_email=dev@holbrook.no
 description=Generic blockchain access library and tooling
-version=0.0.16
+version=0.0.17
 url=https://gitlab.com/chaintools/chainlib
 author=Louis Holbrook