Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def setup(self, target=None, strict=False, minify=False, line_numbers=False, keep_lines=False, no_tco=False):
"""Initializes parsing parameters."""
if target is None:
target = ""
else:
target = str(target).replace(".", "")
if target in pseudo_targets:
target = pseudo_targets[target]
if target not in targets:
raise CoconutException(
"unsupported target Python version " + ascii(target),
extra="supported targets are " + ', '.join(ascii(t) for t in specific_targets) + ", or leave blank for universal",
)
logger.log_vars("Compiler args:", locals())
self.target = target
self.strict = strict
self.minify = minify
self.line_numbers = line_numbers
self.keep_lines = keep_lines
self.no_tco = no_tco
def import_handle(self, original, loc, tokens):
"""Universalizes imports."""
if len(tokens) == 1:
imp_from, imports = None, tokens[0]
elif len(tokens) == 2:
imp_from, imports = tokens
if imp_from == "__future__":
self.strict_err_or_warn("unnecessary from __future__ import (Coconut does these automatically)", original, loc)
return ""
else:
raise CoconutInternalException("invalid import tokens", tokens)
imports = list(imports)
if imp_from == "*" or imp_from is None and "*" in imports:
if not (len(imports) == 1 and imports[0] == "*"):
raise self.make_err(CoconutSyntaxError, "only [from *] import * allowed, not from * import name", original, loc)
logger.warn_err(self.make_err(CoconutSyntaxWarning, "[from *] import * is a Coconut Easter egg and should not be used in production code", original, loc))
return special_starred_import_handle(imp_all=bool(imp_from))
if self.strict:
self.unused_imports.update(imported_names(imports))
return universal_import(imports, imp_from=imp_from, target=self.target)
def stdin_readable():
"""Determine whether stdin has any data to read."""
if not WINDOWS:
try:
return bool(select([sys.stdin], [], [], 0)[0])
except Exception:
logger.log_exc()
try:
return not sys.stdin.isatty()
except Exception:
logger.log_exc()
return False
else:
self.mypy_errs = []
self.mypy_args = list(mypy_args)
if not any(arg.startswith("--python-version") for arg in mypy_args):
self.mypy_args += [
"--python-version",
".".join(str(v) for v in get_target_info_len2(self.comp.target, mode="nearest")),
]
if logger.verbose:
for arg in verbose_mypy_args:
if arg not in self.mypy_args:
self.mypy_args.append(arg)
logger.log("MyPy args:", self.mypy_args)
def handling_exceptions(self):
"""Perform proper exception handling."""
try:
if self.using_jobs:
with handling_broken_process_pool():
yield
else:
yield
except SystemExit as err:
self.register_error(err.code)
except BaseException as err:
if isinstance(err, CoconutException):
logger.display_exc()
elif not isinstance(err, KeyboardInterrupt):
traceback.print_exc()
printerr(report_this_text)
self.register_error(errmsg=err.__class__.__name__)
if do_install:
success = True
for icoconut_kernel_dir in icoconut_kernel_dirs:
install_args = [jupyter, "kernelspec", "install", icoconut_kernel_dir, "--replace"]
try:
install_func(install_args)
except CalledProcessError:
user_install_args = install_args + ["--user"]
try:
install_func(user_install_args)
except CalledProcessError:
logger.warn("kernel install failed on command'", " ".join(install_args))
self.register_error(errmsg="Jupyter error")
success = False
if success:
logger.show_sig("Successfully installed Coconut Jupyter kernel.")
if args:
if args[0] == "console":
ver = "2" if PY2 else "3"
try:
install_func(["python" + ver, "-m", "coconut.main", "--version"])
except CalledProcessError:
kernel_name = "coconut"
else:
kernel_name = "coconut" + ver
run_args = [jupyter, "console", "--kernel", kernel_name] + args[1:]
else:
run_args = [jupyter] + args
self.register_error(run_cmd(run_args, raise_errs=False), errmsg="Jupyter error")
from coconut.terminal import logger
from coconut.compiler import Compiler
from coconut.compiler.util import should_indent
from coconut.command.util import Runner
try:
from IPython.core.inputsplitter import IPythonInputSplitter
from IPython.core.interactiveshell import InteractiveShellABC
from IPython.core.compilerop import CachingCompiler
from ipykernel.ipkernel import IPythonKernel
from ipykernel.zmqshell import ZMQInteractiveShell
except ImportError:
LOAD_MODULE = False
if os.environ.get(conda_build_env_var):
# conda tries to import coconut.icoconut as a test even when IPython isn't available
logger.warn("Missing IPython but detected " + conda_build_env_var + "; skipping coconut.icoconut loading")
else:
raise CoconutException(
"--jupyter flag requires Jupyter library",
extra="run 'pip install coconut[jupyter]' to fix",
)
else:
LOAD_MODULE = True
# -----------------------------------------------------------------------------------------------------------------------
# GLOBALS:
# -----------------------------------------------------------------------------------------------------------------------
COMPILER = Compiler(
target="sys",
line_numbers=True,
keep_lines=True,
def magic(line, cell=None):
"""Provides %coconut and %%coconut magics."""
try:
if cell is None:
code = line
else:
# first line in block is cmd, rest is code
line = line.strip()
if line:
cmd(line)
code = cell
compiled = parse(code)
except CoconutException:
logger.display_exc()
else:
ipython.run_cell(compiled, shell_futures=False)
ipython.register_magic_function(magic, "line_cell", "coconut")
def showpath(path):
"""Format a path for displaying."""
if logger.verbose:
return os.path.abspath(path)
else:
path = os.path.relpath(path)
if path.startswith(os.curdir + os.sep):
path = path[len(os.curdir + os.sep):]
return path
def kill_children():
"""Terminate all child processes."""
try:
import psutil
except ImportError:
logger.warn(
"missing psutil; --jobs may not properly terminate",
extra="run 'pip install coconut[jobs]' to fix",
)
else:
master = psutil.Process()
children = master.children(recursive=True)
while children:
for child in children:
try:
child.terminate()
except psutil.NoSuchProcess:
pass # process is already dead, so do nothing
children = master.children(recursive=True)