# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-# vi: set ft=python sts=4 ts=4 sw=4 et:## Copyright 2021 The NiPreps Developers <nipreps@gmail.com>## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.## We support and encourage derived works from this project, please read# about our expectations at## https://www.nipreps.org/community/licensing/## STATEMENT OF CHANGES: This file is derived from sources licensed under the Apache-2.0 terms,# and uses the following portion of the original code:# https://github.com/dandi/dandi-cli/blob/da3b7a726c4a352dfb53a0c6bee59e660de827e6/dandi/utils.py#L49-L82### ORIGINAL WORK'S ATTRIBUTION NOTICE:## Copyright 2020 DANDI Client Developers## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.#importsys
[docs]defis_interactive():"""Return True if all in/outs are tty"""# TODO: check on windows if hasattr check would work correctly and add value:#returnsys.stdin.isatty()andsys.stdout.isatty()andsys.stderr.isatty()
[docs]defsetup_exceptionhook(ipython=False):"""Overloads default sys.excepthook with our exceptionhook handler. If interactive, our exceptionhook handler will invoke pdb.post_mortem; if not interactive, then invokes default handler. """def_pdb_excepthook(tp,value,tb):importtracebacktraceback.print_exception(tp,value,tb)print()ifis_interactive():importpdb# noqa: T100pdb.post_mortem(tb)ifipython:fromIPython.coreimportultratbsys.excepthook=ultratb.FormattedTB(mode='Verbose',# color_scheme='Linux',call_pdb=is_interactive(),)else:sys.excepthook=_pdb_excepthook