Esempio n. 1
0
    def test_defaults(self):
        # Given
        message = "Do you want to do it ? [Y/n]"

        # When
        with mock_print() as m:
            with mock_raw_input(""):
                res = prompt_yes_no(message, default=True)

        # Then
        self.assertEqual(m.value.rstrip(), message)
        self.assertTrue(res)

        # When
        with mock_print() as m:
            with mock_raw_input(""):
                res = prompt_yes_no(message, default=False)

        # Then
        self.assertEqual(m.value.rstrip(), message)
        self.assertFalse(res)

        # When
        with mock_print() as m:
            with mock.patch(INPUT_IMPORT_STRING, side_effect=["", "yes"]) \
                    as mocked_input:
                res = prompt_yes_no(message, default=None)

        # Then
        self.assertEqual(mocked_input.call_count, 2)
        self.assertTrue(res)
Esempio n. 2
0
def update_enstaller(session, repository, opts):
    """
    Check if Enstaller is up to date, and if not, ask the user if he
    wants to update.  Return boolean indicating whether enstaller was
    updated.
    """
    updated = False
    if not enstaller.__is_released__:
        return updated

    package_name = "enstaller"

    current_comparable_version = \
        _get_enstaller_comparable_version(sys.prefix, package_name)

    try:
        latest = repository.find_latest_package(package_name)
    except NoSuchPackage:
        updated = False
    else:
        if latest.version > current_comparable_version:
            if prompt_yes_no("Enstaller is out of date.  Update? ([y]/n) ",
                             opts.yes):
                inplace_update(session, repository, latest)
                updated = True

    return updated
Esempio n. 3
0
def update_enstaller(session, repository, opts):
    """
    Check if Enstaller is up to date, and if not, ask the user if he
    wants to update.  Return boolean indicating whether enstaller was
    updated.
    """
    updated = False
    if not enstaller.__is_released__:
        return updated

    package_name = "enstaller"

    current_comparable_version = \
        _get_enstaller_comparable_version(sys.prefix, package_name)

    try:
        latest = repository.find_latest_package(package_name)
    except NoSuchPackage:
        updated = False
    else:
        if latest.version > current_comparable_version:
            if prompt_yes_no("Enstaller is out of date.  Update? ([y]/n) ",
                             opts.yes):
                inplace_update(session, repository, latest)
                updated = True

    return updated
Esempio n. 4
0
def epd_install_confirm(force_yes=False):
    msg = textwrap.dedent("""\
        Warning: 'enpkg epd' will downgrade any packages that are currently")
        at a higher version than in the specified EPD release.
        Usually it is preferable to update all installed packages with:
            enpkg --update-all""")
    print(msg)
    return prompt_yes_no("Are you sure that you wish to proceed? (y/[n]) ",
                         force_yes)
Esempio n. 5
0
def epd_install_confirm(force_yes=False):
    msg = textwrap.dedent("""\
        Warning: 'enpkg epd' will downgrade any packages that are currently")
        at a higher version than in the specified EPD release.
        Usually it is preferable to update all installed packages with:
            enpkg --update-all""")
    print(msg)
    return prompt_yes_no("Are you sure that you wish to proceed? (y/[n]) ",
                         force_yes)
Esempio n. 6
0
    def test_simple_no(self):
        # Given
        message = "Do you want to do it ?"

        # When
        with mock_print() as m:
            with mock_raw_input("no"):
                res = prompt_yes_no(message)

        # Then
        self.assertEqual(m.value.rstrip(), message)
        self.assertFalse(res)
Esempio n. 7
0
    def test_simple_no(self):
        # Given
        message = "Do you want to do it ?"

        # When
        with mock_print() as m:
            with mock_raw_input("no"):
                res = prompt_yes_no(message)

        # Then
        self.assertEqual(m.value.rstrip(), message)
        self.assertFalse(res)
Esempio n. 8
0
    def test_simple_force_yes(self):
        # Given
        message = "Do you want to do it ?"

        # When
        with mock_print() as m:
            with mock_raw_input("yes") as mocked_input:
                res = prompt_yes_no(message, True)

        # Then
        self.assertEqual(m.value.rstrip(), message)
        self.assertTrue(res)
        mocked_input.assert_called()
Esempio n. 9
0
    def test_simple_force_yes(self):
        # Given
        message = "Do you want to do it ?"

        # When
        with mock_print() as m:
            with mock_raw_input("yes") as mocked_input:
                res = prompt_yes_no(message, True)

        # Then
        self.assertEqual(m.value.rstrip(), message)
        self.assertTrue(res)
        mocked_input.assert_called()
Esempio n. 10
0
    def _ask_pypi_confirmation(package_list_string):
        msg = textwrap.dedent("""\
        The following packages/requirements are coming from the PyPi repo:

        {0}

        The PyPi repository which contains >10,000 untested ("as is")
        packages. Some packages are licensed under GPL or other licenses
        which are prohibited for some users. Dependencies may not be
        provided. If you need an updated version or if the installation
        fails due to unmet dependencies, the Knowledge Base article
        Installing external packages into Canopy Python
        (https://support.enthought.com/entries/23389761) may help you with
        installing it.
        """.format(package_list_string))
        print(msg)

        msg = "Are you sure that you wish to proceed?  (y/[n])"
        if not prompt_yes_no(msg, opts.yes):
            sys.exit(0)
Esempio n. 11
0
    def _ask_pypi_confirmation(package_list_string):
        msg = textwrap.dedent("""\
        The following packages/requirements are coming from the PyPi repo:

        {0}

        The PyPi repository which contains >10,000 untested ("as is")
        packages. Some packages are licensed under GPL or other licenses
        which are prohibited for some users. Dependencies may not be
        provided. If you need an updated version or if the installation
        fails due to unmet dependencies, the Knowledge Base article
        Installing external packages into Canopy Python
        (https://support.enthought.com/entries/23389761) may help you with
        installing it.
        """.format(package_list_string))
        print(msg)

        msg = "Are you sure that you wish to proceed?  (y/[n])"
        if not prompt_yes_no(msg, opts.yes):
            sys.exit(0)
Esempio n. 12
0
def dispatch_commands_with_enpkg(args, enpkg, config, prefix, session, parser,
                                 pat):
    if args.dry_run:
        def print_actions(actions):
            for item in actions:
                print('%-8s %s' % item)
        enpkg.execute = print_actions

    if args.imports:                              # --imports
        repository = Repository._from_prefixes(enpkg.prefixes)
        imports_option(repository)
        return

    if args.revert:                               # --revert
        revert(enpkg, args.revert)
        return

    # Try to auto-update enstaller
    if config.autoupdate:
        if update_enstaller(session, enpkg._remote_repository, args):
            print("Enstaller has been updated.\n"
                  "Please re-run your previous command.")
            return

    if args.search:                               # --search
        search(enpkg._remote_repository, enpkg._installed_repository,
               config, session, pat)
        return

    if args.info:                                 # --info
        if len(args.cnames) != 1:
            parser.error("Option requires one argument (name of package)")
        info_option(enpkg._remote_repository, enpkg._installed_repository,
                    args.cnames[0])
        return

    if args.whats_new:                            # --whats-new
        whats_new(enpkg._remote_repository, enpkg._installed_repository)
        return

    if args.update_all:                           # --update-all
        update_all(enpkg, config, args)
        return

    if args.requirements:
        install_from_requirements(enpkg, config, args)
        return

    if len(args.cnames) == 0 and not args.remove_enstaller:
        parser.error("Requirement(s) missing")
    elif len(args.cnames) == 2:
        pat = re.compile(r'\d+\.\d+')
        if pat.match(args.cnames[1]):
            args.cnames = ['-'.join(args.cnames)]

    reqs = _compute_reqs(args.cnames)

    # This code assumes we have already upgraded enstaller if needed
    if needs_to_downgrade_enstaller(reqs):
        msg = "Enstaller in requirement list: enstaller will be downgraded !"
        warnings.warn(msg)
    else:
        logger.debug("Enstaller is up to date, not updating")
        reqs = [req for req in reqs if req.name != "enstaller"]

    logger.info("Requirements:")
    for req in reqs:
        logger.info('    %r', req)

    logger.info("prefix: %r", prefix)

    REMOVE_ENSTALLER_WARNING = ("Removing enstaller package will break enpkg "
                                "and is not recommended.")
    if args.remove:
        if any(req.name == 'enstaller' for req in reqs):
            print(REMOVE_ENSTALLER_WARNING)
            print("If you are sure you wish to remove enstaller, use:")
            print("    enpkg --remove-enstaller")
            return

    if args.remove_enstaller:
        print(REMOVE_ENSTALLER_WARNING)
        if prompt_yes_no("Really remove enstaller? (y/[n]) ", args.yes):
            args.remove = True
            reqs = [Requirement('enstaller')]

    if any(req.name == 'epd' for req in reqs):
        if args.remove:
            parser.error("Can't remove 'epd'")
        elif len(reqs) > 1:
            parser.error("Can't combine 'enpkg epd' with other packages.")
        elif not epd_install_confirm(args.yes):
            return

    if args.remove:
        for req in reqs:
            solver = enpkg._solver_factory()
            try:
                request = Request()
                request.remove(req)
                enpkg.execute(solver.resolve(request))
            except EnpkgError as e:
                print(str(e))
    else:
        for req in reqs:
            install_req(enpkg, config, req, args)
Esempio n. 13
0
def exit_if_root_on_non_owned(force_yes=False):
    if is_running_on_non_owned_python():
        msg = ("You are running enpkg in a python installation not "
               "owned by root, are you sure to continue ? (y/[n])")
        if not prompt_yes_no(msg, force_yes=force_yes):
            sys.exit(-1)
Esempio n. 14
0
def dispatch_commands_with_enpkg(args, enpkg, config, prefix, session, parser,
                                 pat):
    if args.dry_run:

        def print_actions(actions):
            for item in actions:
                print('%-8s %s' % item)

        enpkg.execute = print_actions

    if args.imports:  # --imports
        repository = Repository._from_prefixes(enpkg.prefixes)
        imports_option(repository)
        return

    if args.revert:  # --revert
        revert(enpkg, args.revert)
        return

    # Try to auto-update enstaller
    if config.autoupdate:
        if update_enstaller(session, enpkg._remote_repository, args):
            print("Enstaller has been updated.\n"
                  "Please re-run your previous command.")
            return

    if args.search:  # --search
        search(enpkg._remote_repository, enpkg._installed_repository, config,
               session, pat)
        return

    if args.info:  # --info
        if len(args.cnames) != 1:
            parser.error("Option requires one argument (name of package)")
        info_option(enpkg._remote_repository, enpkg._installed_repository,
                    args.cnames[0])
        return

    if args.whats_new:  # --whats-new
        whats_new(enpkg._remote_repository, enpkg._installed_repository)
        return

    if args.update_all:  # --update-all
        update_all(enpkg, config, args)
        return

    if args.requirements:
        install_from_requirements(enpkg, config, args)
        return

    if len(args.cnames) == 0 and not args.remove_enstaller:
        parser.error("Requirement(s) missing")
    elif len(args.cnames) == 2:
        pat = re.compile(r'\d+\.\d+')
        if pat.match(args.cnames[1]):
            args.cnames = ['-'.join(args.cnames)]

    reqs = _compute_reqs(args.cnames)

    # This code assumes we have already upgraded enstaller if needed
    if needs_to_downgrade_enstaller(reqs):
        msg = "Enstaller in requirement list: enstaller will be downgraded !"
        warnings.warn(msg)
    else:
        logger.debug("Enstaller is up to date, not updating")
        reqs = [req for req in reqs if req.name != "enstaller"]

    logger.info("Requirements:")
    for req in reqs:
        logger.info('    %r', req)

    logger.info("prefix: %r", prefix)

    REMOVE_ENSTALLER_WARNING = ("Removing enstaller package will break enpkg "
                                "and is not recommended.")
    if args.remove:
        if any(req.name == 'enstaller' for req in reqs):
            print(REMOVE_ENSTALLER_WARNING)
            print("If you are sure you wish to remove enstaller, use:")
            print("    enpkg --remove-enstaller")
            return

    if args.remove_enstaller:
        print(REMOVE_ENSTALLER_WARNING)
        if prompt_yes_no("Really remove enstaller? (y/[n]) ", args.yes):
            args.remove = True
            reqs = [Requirement('enstaller')]

    if any(req.name == 'epd' for req in reqs):
        if args.remove:
            parser.error("Can't remove 'epd'")
        elif len(reqs) > 1:
            parser.error("Can't combine 'enpkg epd' with other packages.")
        elif not epd_install_confirm(args.yes):
            return

    if args.remove:
        for req in reqs:
            solver = enpkg._solver_factory()
            try:
                request = Request()
                request.remove(req)
                enpkg.execute(solver.resolve(request))
            except EnpkgError as e:
                print(str(e))
    else:
        for req in reqs:
            install_req(enpkg, config, req, args)