Source code for dotfiles.venv.ipython_magics

#!/usr/bin/env ipython
# dotfiles.venv.ipython_magic
"""
IPython ``%magic`` commands

* ``cd`` aliases
* ``ds`` (``dotfiles_status``)
* ``dr`` (``dotfiles_reload``)

Installation
--------------
.. code-block:: bash

    __DOTFILES="~/.dotfiles"
    ipython_profile="profile_default"
    ln -s ${__DOTFILES}/etc/ipython/ipython_magics.py \\
        ~/.ipython/${ipython_profile}/startup/ipython_magics.py
"""
import os
try:
    from IPython.core.magic import (Magics, magics_class, line_magic)
except ImportError:
    print("ImportError: IPython")
    # Mock IPython for building docs
    Magics = object
    magics_class = lambda cls, *args, **kwargs: cls
    line_magic = lambda func, *args, **kwargs: func

@magics_class
[docs]class VenvMagics(Magics):
[docs] def cd(self, envvar, line): """ Change directory Args: envvar (str): os.environ variable name line (str): path to append to envvar """ prefix = os.environ.get(envvar, "") path = os.path.join(prefix, line) return self.shell.magic('cd %s' % path)
@line_magic
[docs] def cdb(self, line): """cdb() -- cd ${_BIN}/${@}""" return self.cd('_BIN', line)
@line_magic
[docs] def cde(self, line): """cde() -- cd ${_ETC}/${@}""" return self.cd('_ETC', line)
@line_magic
[docs] def cdh(self, line): """cdh() -- cd ${HOME}/${@}""" return self.cd('HOME', line)
@line_magic
[docs] def cdl(self, line): """cdl() -- cd ${_LIB}/${@}""" return self.cd('_LIB', line)
@line_magic
[docs] def cdlog(self, line): """cdlog() -- cd ${_LOG}/${@}""" return self.cd('_LOG', line)
@line_magic
[docs] def cdp(self, line): """cdp() -- cd ${PROJECT_HOME}/${@}""" return self.cd('PROJECT_HOME', line)
@line_magic
[docs] def cdph(self, line): """cdph() -- cd ${PROJECT_HOME}/${@}""" return self.cd('PROJECT_HOME', line)
@line_magic
[docs] def cdpylib(self, line): """cdpylib() -- cd ${PYLIB)/${@}""" return self.cd('_PYLIB', line)
@line_magic
[docs] def cdpysite(self, line): """cdpysite() -- cd ${PYSITE}/${@}""" return self.cd('_PYSITE', line)
@line_magic
[docs] def cdsitepackages(self, line): """cdsitepackages() -- cd ${_PYSITE}/${@}""" return self.cd('_PYSITE', line)
@line_magic
[docs] def cds(self, line): """cds() -- cd ${_SRC}/${@}""" return self.cd('_SRC', line)
@line_magic
[docs] def cdv(self, line): """cdv() -- cd ${VIRTUAL_ENV}/${@}""" return self.cd('VIRTUAL_ENV', line)
@line_magic
[docs] def cdve(self, line): """cdve() -- cd ${VIRTUAL_ENV}/${@}""" return self.cd('VIRTUAL_ENV', line)
@line_magic
[docs] def cdvirtualenv(self, line): """cdvirtualenv() -- cd ${VIRTUAL_ENV}/${@}""" return self.cd('VIRTUAL_ENV', line)
@line_magic
[docs] def cdvar(self, line): """cdvar() -- cd ${_VAR}/${@}""" return self.cd('_VAR', line)
@line_magic
[docs] def cdw(self, line): """cdw() -- cd ${_WRD}/${@}""" return self.cd('_WRD', line)
@line_magic
[docs] def cdwrd(self, line): """cdwrd() -- cd ${_WRD}/${@}""" return self.cd('_WRD', line)
@line_magic
[docs] def cdwrk(self, line): """cdwrk() -- cd ${WORKON_HOME}/${@}""" return self.cd('WORKON_HOME', line)
@line_magic
[docs] def cdwh(self, line): """cdwh() -- cd ${WORKON_HOME}/${@}""" return self.cd('WORKON_HOME', line)
@line_magic
[docs] def cdww(self, line): """cdww() -- cd ${_WWW}/${@}""" return self.cd('_WWW', line)
@line_magic
[docs] def cdwww(self, line): """cdwww() -- cd ${_WWW}/${@}""" return self.cd('_WWW', line)
@line_magic
[docs] def cdhelp(self, line): """cdhelp() -- list cd commands""" print("\n".join(x for x in dir(self) if x.startswith('cd')))
@staticmethod def _dotfiles_status(): """ Print ``dotfiles_status``: venv variables """ env_vars = [ 'HOSTNAME', 'USER', 'PROJECT_HOME', 'WORKON_HOME', 'VIRTUAL_ENV_NAME', 'VIRTUAL_ENV', '_USRLOG', '_TERM_ID', '_SRC', '_APP', '_WRD', 'PATH', '__DOTFILES', ] environ = dict((var, os.environ.get(var)) for var in env_vars) environ['HOSTNAME'] = __import__('socket').gethostname() for var in env_vars: print('{}="{}"'.format(var, "%s" % environ.get(var,''))) @line_magic
[docs] def dotfiles_status(self, line): """dotfiles_status() -- print dotfiles_status() .""" return self._dotfiles_status()
@line_magic
[docs] def ds(self, line): """ds() -- print dotfiles_status() .""" return self._dotfiles_status()
@staticmethod def _dotfiles_reload(): """_dotfiles_reload() -- print NotImplemented""" print("NotImplemented: dotfiles_reload()") @line_magic
[docs] def dotfiles_reload(self, line): """dotfiles_reload() -- print NotImplemented""" return self._dotfiles_reload()
@line_magic
[docs] def dr(self, line): """dr() -- print NotImplemented [dotfiles_reload()]""" return self._dotfiles_reload()
[docs]def main(): """ Register VenvMagics with IPython """ import IPython ip = IPython.get_ipython() ip.register_magics(VenvMagics)
if __name__=="__main__": main()