Source code for excentury.command.select

"""Select

Select an excentury project

"""

import textwrap
import os.path as pth
from excentury.command import error, disp
from excentury.command.add import get_entries
from excentury.command.install import excenturyrc_str


DESC = """
Enter a project name or an integer to select one of the bookmarked
projects. Use select with no arguments to view the entries.

The `~/.bash_profile` or `~/.bashrc` file must be sourced after the
call of this command in order for the chances to take effect.

"""


[docs]def add_parser(subp, raw): """Add a parser to the main subparser. """ tmpp = subp.add_parser('select', help='select an excentury project', formatter_class=raw, description=textwrap.dedent(DESC)) tmpp.add_argument('project', type=str, default=None, nargs='?', help='project name or number')
[docs]def display(): """Display the excentury projects. """ data = get_entries() current = get_current() if current == '': disp('No project is currently selected\n') else: disp(' [0]: Select this entry for excenturys default use \n') for num, entry in enumerate(data): if current == entry[1]: disp('->[%d]: %s --> %s\n' % (num+1, entry[0], entry[1])) else: disp(' [%d]: %s --> %s\n' % (num+1, entry[0], entry[1]))
[docs]def get_current(): """Read the file `~/.excentury/current` to obtain the current project.""" fpath = pth.expandvars("$HOME/.excentury/current") try: with open(fpath, 'r') as _fp: content = _fp.read().strip() except IOError: content = '' return content
[docs]def set_current(path): """Write the current file. """ fpath = pth.expandvars("$HOME/.excentury/current") with open(fpath, 'w') as _fp: _fp.write(path)
[docs]def set_project(name): """Sets a project. """ rc_path = pth.expandvars('$HOME/.excentury/excenturyrc') if name == '0': with open(rc_path, 'w') as rcfile: rcfile.write(excenturyrc_str()) set_current('') disp("Restart bash to clear previous project settings.\n") return data = get_entries() found = False for num, entry in enumerate(data): if name in [entry[0], str(num+1)]: set_current(entry[1]) with open(rc_path, 'w') as rcfile: rcfile.write(excenturyrc_str()) rcfile.write('source %s/.xcpprc\n' % entry[1]) disp('Project %r has been set. Restart bash.\n' % name) found = True break if not found: error("ERROR: not a valid entry\n")
[docs]def run(arg): """Run the command. """ if arg.project is None: display() return set_project(arg.project)