Skip to content

Commit

Permalink
New Logger new_release (#64)
Browse files Browse the repository at this point in the history
* add loggin

* create log file in tmp path

* add logger file

* remove file and line description in log file

* fix stdout output to pass pytests

* added print function along with logging function; added the logging.exception function to catch the raise exception.

* logger fix to remove redundant prints

* fix handlers

* Refactored logger and cli

* Test -w x -d args

* Decoupled stdout from file log

* Use tempfile for log

* Fixed logic for delOutputFiles()

Co-authored-by: lkagami <[email protected]>
  • Loading branch information
alanwilter and lkagami authored Dec 24, 2021
1 parent 3e0a978 commit 2f1ddc4
Show file tree
Hide file tree
Showing 9 changed files with 173 additions and 77 deletions.
9 changes: 1 addition & 8 deletions Acpype_API_Jupyter.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"2021.12.14\n"
"2021.12.24\n"
]
},
{
Expand Down Expand Up @@ -91,13 +91,6 @@
"==> * Antechamber OK *\n",
"==> * Parmchk OK *\n",
"==> Executing Tleap...\n",
"++++++++++start_quote+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
"Checking 'DMP'....\n",
"Checking parameters for unit 'DMP'.\n",
"Checking for bond parameters.\n",
"Checking for angle parameters.\n",
"Unit is OK.\n",
"++++++++++end_quote+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
"==> * Tleap OK *\n",
"==> Removing temporary files...\n"
]
Expand Down
2 changes: 1 addition & 1 deletion acpype/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# from https://packaging.python.org/guides/single-sourcing-package-version/
# using option 2
# updated automatically via pre-commit git-hook
__version__ = "2021.12.23"
__version__ = "2021.12.24"
48 changes: 22 additions & 26 deletions acpype/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,31 +55,19 @@
import time
import os
import sys
from shutil import rmtree, which
from shutil import rmtree
from acpype.topol import MolTopol, ACTopol, header
from acpype.parser_args import get_option_parser
from acpype.utils import while_replace, elapsedTime
from acpype.utils import while_replace, elapsedTime, set_for_pip
from acpype.params import binaries


def set_for_pip(binaries):
# For pip package
if which(binaries["ac_bin"]) is None:
LOCAL_PATH = os.path.dirname(__file__)
if sys.platform == "linux":
os.environ["PATH"] += os.pathsep + LOCAL_PATH + "/amber21-11_linux/bin"
os.environ["AMBERHOME"] = LOCAL_PATH + "/amber21-11_linux/"
os.environ["LD_LIBRARY_PATH"] = LOCAL_PATH + "/amber21-11_linux/lib/"
elif sys.platform == "darwin":
os.environ["PATH"] += os.pathsep + LOCAL_PATH + "/amber21-11_os/bin"
os.environ["AMBERHOME"] = LOCAL_PATH + "/amber21-11_os/"
os.environ["LD_LIBRARY_PATH"] = LOCAL_PATH + "/amber21-11_os/lib/"
os.environ["DYLD_LIBRARY_PATH"] = LOCAL_PATH + "/amber21-11_os/lib/"
from acpype.logger import copy_log, set_logging_conf as logger


def chk_py_ver():
if sys.version_info < (3, 6):
raise Exception("Sorry, you need python 3.6 or higher")
msg = "Sorry, you need python 3.6 or higher"
logger().exception(msg)
raise Exception(msg)


def init_main(binaries=binaries, argv=None):
Expand All @@ -103,7 +91,13 @@ def init_main(binaries=binaries, argv=None):
print(header)
sys.exit(0)

print(header)
level = 20
if not args.verboseless:
level = 100
if args.debug:
level = 10

logger(level).info(header)

if not args.input:
amb2gmxF = True
Expand All @@ -112,16 +106,16 @@ def init_main(binaries=binaries, argv=None):
elif args.inpcrd or args.prmtop:
parser.error("either '-i' or ('-p', '-x'), but not both")

if args.debug:
texta = "Python Version %s" % sys.version
print("DEBUG: %s" % while_replace(texta))
logger(level).debug(f"CLI: {' '.join(argv)}")
texta = "Python Version %s" % sys.version
logger(level).debug(while_replace(texta))

if args.direct and not amb2gmxF:
parser.error("option -u is only meaningful in 'amb2gmx' mode (args '-p' and '-x')")

try:
if amb2gmxF:
print("Converting Amber input files to Gromacs ...")
logger(level).info("Converting Amber input files to Gromacs ...")
system = MolTopol(
acFileXyz=args.inpcrd,
acFileTop=args.prmtop,
Expand All @@ -138,6 +132,7 @@ def init_main(binaries=binaries, argv=None):

system.printDebug("prmtop and inpcrd files parsed")
system.writeGromacsTopolFiles()
copy_log(system)
else:
molecule = ACTopol(
args.input,
Expand Down Expand Up @@ -165,11 +160,11 @@ def init_main(binaries=binaries, argv=None):

molecule.createACTopol()
molecule.createMolTopol()

copy_log(molecule)
acpypeFailed = False
except Exception:
_exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
print("ACPYPE FAILED: %s" % exceptionValue)
logger(level).error("ACPYPE FAILED: %s" % exceptionValue)
if args.debug:
traceback.print_tb(exceptionTraceback, file=sys.stdout)
acpypeFailed = True
Expand All @@ -179,7 +174,7 @@ def init_main(binaries=binaries, argv=None):
amsg = "less than a second"
else:
amsg = elapsedTime(execTime)
print("Total time of execution: %s" % amsg)
logger(level).info("Total time of execution: %s" % amsg)

if args.ipython:
import IPython # pylint: disable=import-outside-toplevel
Expand All @@ -190,6 +185,7 @@ def init_main(binaries=binaries, argv=None):
rmtree(molecule.tmpDir)
except Exception:
pass

if acpypeFailed:
sys.exit(19)
try:
Expand Down
71 changes: 71 additions & 0 deletions acpype/logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import os
from shutil import move
import sys
import logging
from tempfile import NamedTemporaryFile

tmpLogFile = NamedTemporaryFile().name


class LogFormatter(logging.Formatter):

"""
Define log formatter
"""

err_fmt = "ERROR: %(msg)s"
warn_fmt = "WARNING: %(msg)s"
dbg_fmt = "DEBUG: %(msg)s"
info_fmt = "%(msg)s"

def __init__(self):
super().__init__(fmt="%(levelno)d: %(msg)s", datefmt=None, style="%")

def format(self, record):

# Save the original format configured by the user
# when the logger formatter was instantiated
format_orig = self._style._fmt

# Replace the original format with one customized by logging level
if record.levelno == logging.DEBUG:
self._style._fmt = LogFormatter.dbg_fmt
elif record.levelno == logging.INFO:
self._style._fmt = LogFormatter.info_fmt
elif record.levelno == logging.ERROR:
self._style._fmt = LogFormatter.err_fmt
elif record.levelno == logging.WARNING:
self._style._fmt = LogFormatter.warn_fmt
# Call the original formatter class to do the grunt work
result = logging.Formatter.format(self, record)
# Restore the original format configured by the user
self._style._fmt = format_orig
return result


def copy_log(molecule):
local_log = os.path.join(molecule.absHomeDir, "acpype.log")
if os.path.exists(local_log):
os.remove(local_log)
if os.path.exists(tmpLogFile):
move(tmpLogFile, local_log)


def set_logging_conf(level=20):
# Setting logging configurations
logging.root.setLevel(0)
logger = logging.getLogger(__name__)
if logger.handlers:
logger.handlers.pop()

fmt = LogFormatter()
file_handler = logging.FileHandler(filename=tmpLogFile)
stdout_handler = logging.StreamHandler(sys.stdout)
file_handler.setLevel(logging.DEBUG)
stdout_handler.setLevel(level)
stdout_handler.setFormatter(fmt)
file_handler.setFormatter(fmt)
if not logger.handlers:
logger.addHandler(file_handler)
logger.addHandler(stdout_handler)
return logger
16 changes: 8 additions & 8 deletions acpype/parser_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ def get_option_parser():
dest="debug",
help="for debugging purposes, keep any temporary file created (not allowed with arg -w)",
)
group.add_argument(
"-w",
"--verboseless",
action="store_false",
default=True,
dest="verboseless",
help="print nothing (not allowed with arg -d)",
)
parser.add_argument(
"-o",
"--outtop",
Expand Down Expand Up @@ -139,14 +147,6 @@ def get_option_parser():
dest="ipython",
help="start iPython interpreter",
)
group.add_argument(
"-w",
"--verboseless",
action="store_false",
default=True,
dest="verboseless",
help="print nothing (not allowed with arg -d)",
)
parser.add_argument(
"-g",
"--merge",
Expand Down
Loading

0 comments on commit 2f1ddc4

Please sign in to comment.