⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 280640 in webkit


Ignore:
Timestamp:
Aug 4, 2021, 10:58:51 AM (5 years ago)
Author:
Jonathan Bedard
Message:

[webkitcorepy] Add shared terminal input code
https://bugs.webkit.org/show_bug.cgi?id=226024
<rdar://problem/78261645>

Reviewed by Dewei Zhu.

  • Scripts/libraries/webkitcorepy/setup.py: Bump version.
  • Scripts/libraries/webkitcorepy/webkitcorepy/init.py: Export Terminal object, bump version.
  • Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:

(credentials): Use Terminal.input.

  • Scripts/libraries/webkitcorepy/webkitcorepy/mocks/init.py:
  • Scripts/libraries/webkitcorepy/webkitcorepy/mocks/terminal.py: Added.

(Terminal):
(Terminal.input): Mocking input and raw_input requires so specialized knowledge,
so we should generalize it.

  • Scripts/libraries/webkitcorepy/webkitcorepy/terminal.py: Added.

(Terminal):
(Terminal.input): Python 2/3 compatible input function.
(Terminal.choose): Generic multiple-choice input prompt.

  • Scripts/libraries/webkitcorepy/webkitcorepy/tests/terminal_unittest.py: Added.

(TerminalTests):
(TerminalTests.test_choose_basic):
(TerminalTests.test_choose_strict):
(TerminalTests.test_choose_default):
(TerminalTests.test_choose_triple):
(TerminalTests.test_choose_number):

  • Scripts/webkitpy/common/system/user.py:

(User.prompt): Use Terminal.input.
(User.prompt_with_multiple_lists): Ditto.
(User.prompt_with_list): Ditto.
(User.confirm): Ditto.

  • Scripts/webkitpy/common/system/user_mock.py:

(MockUser.prompt): Use Terminal.input.
(MockUser.prompt_with_list): Ditto.

Location:
trunk/Tools
Files:
2 added
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r280635 r280640  
     12021-08-04  Jonathan Bedard  <jbedard@apple.com>
     2
     3        [webkitcorepy] Add shared terminal input code
     4        https://bugs.webkit.org/show_bug.cgi?id=226024
     5        <rdar://problem/78261645>
     6
     7        Reviewed by Dewei Zhu.
     8
     9        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
     10        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Export Terminal object, bump version.
     11        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
     12        (credentials): Use Terminal.input.
     13        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py:
     14        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/terminal.py: Added.
     15        (Terminal):
     16        (Terminal.input): Mocking input and raw_input requires so specialized knowledge,
     17        so we should generalize it.
     18        * Scripts/libraries/webkitcorepy/webkitcorepy/terminal.py: Added.
     19        (Terminal):
     20        (Terminal.input): Python 2/3 compatible input function.
     21        (Terminal.choose): Generic multiple-choice input prompt.
     22        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/terminal_unittest.py: Added.
     23        (TerminalTests):
     24        (TerminalTests.test_choose_basic):
     25        (TerminalTests.test_choose_strict):
     26        (TerminalTests.test_choose_default):
     27        (TerminalTests.test_choose_triple):
     28        (TerminalTests.test_choose_number):
     29        * Scripts/webkitpy/common/system/user.py:
     30        (User.prompt): Use Terminal.input.
     31        (User.prompt_with_multiple_lists): Ditto.
     32        (User.prompt_with_list): Ditto.
     33        (User.confirm): Ditto.
     34        * Scripts/webkitpy/common/system/user_mock.py:
     35        (MockUser.prompt): Use Terminal.input.
     36        (MockUser.prompt_with_list): Ditto.
     37
    1382021-08-04  Andres Gonzalez  <andresg_22@apple.com>
    239
  • trunk/Tools/Scripts/libraries/webkitcorepy/setup.py

    r280550 r280640  
    3131setup(
    3232    name='webkitcorepy',
    33     version='0.7.4',
     33    version='0.8.0',
    3434    description='Library containing various Python support classes and functions.',
    3535    long_description=readme(),
  • trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py

    r280550 r280640  
    3636from webkitcorepy.output_capture import LoggerCapture, OutputCapture, OutputDuplicate
    3737from webkitcorepy.task_pool import TaskPool
     38from webkitcorepy.terminal import Terminal
    3839from webkitcorepy.credentials import credentials
    3940from webkitcorepy.measure_time import MeasureTime
    4041from webkitcorepy.nested_fuzzy_dict import NestedFuzzyDict
    4142
    42 version = Version(0, 7, 4)
     43version = Version(0, 8, 0)
    4344
    4445from webkitcorepy.autoinstall import Package, AutoInstall
  • trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py

    r280435 r280640  
    2626
    2727from subprocess import CalledProcessError
    28 from webkitcorepy import OutputCapture
     28from webkitcorepy import OutputCapture, Terminal
    2929
    3030_cache = dict()
     
    6565            sys.stderr.write("Authentication required to use {}\n".format(prompt or name))
    6666            sys.stderr.write('Username: ')
    67             username = (input if sys.version_info > (3, 0) else raw_input)()
     67            username = Terminal.input()
    6868            username_prompted = True
    6969
     
    8686    if keyring and (username_prompted or key_prompted):
    8787        sys.stderr.write('Store username and {} in system keyring for {}? (Y/N): '.format(key_name, url))
    88         response = (input if sys.version_info > (3, 0) else raw_input)()
     88        response = Terminal.input()
    8989        if response.lower() in ['y', 'yes', 'ok']:
    9090            sys.stderr.write('Storing credentials...\n')
  • trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py

    r269919 r280640  
    2626
    2727from webkitcorepy.mocks.requests_ import Response, Requests
     28from webkitcorepy.mocks.terminal import Terminal
  • trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/terminal.py

    r280639 r280640  
    1 # Copyright (C) 2020 Apple Inc. All rights reserved.
     1# Copyright (C) 2021 Apple Inc. All rights reserved.
    22#
    33# Redistribution and use in source and binary forms, with or without
     
    2121# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2222
    23 from webkitcorepy.mocks.context_stack import ContextStack
    24 from webkitcorepy.mocks.time_ import Time
    25 from webkitcorepy.mocks.subprocess import ProcessCompletion, Subprocess
     23import sys
    2624
    27 from webkitcorepy.mocks.requests_ import Response, Requests
     25
     26class Terminal(object):
     27    index = 0
     28
     29    @classmethod
     30    def input(cls, *args):
     31        from mock import patch
     32
     33        cls.index = 0
     34
     35        def function(output):
     36            print(output)
     37            cls.index += 1
     38            return args[cls.index - 1]
     39
     40        if sys.version_info > (3, 0):
     41            return patch('builtins.input', new=function)
     42
     43        import __builtin__
     44        return patch.object(__builtin__, 'raw_input', new=function)
  • trunk/Tools/Scripts/webkitpy/common/system/user.py

    r277853 r280640  
    3737import webbrowser
    3838
     39from webkitcorepy import Terminal
     40
    3941from webkitpy.common.system.executive import Executive
    4042from webkitpy.common.system.platforminfo import PlatformInfo
     
    5153        _log.warn("Unable to import readline.")
    5254
    53 if sys.version_info > (3, 0):
    54     input_func = input
    55 else:
    56     input_func = raw_input
    57 
    5855
    5956class User(object):
     
    6865    # FIXME: These are @classmethods because bugzilla.py doesn't have a Tool object (thus no User instance).
    6966    @classmethod
    70     def prompt(cls, message, repeat=1, raw_input=input_func):
     67    def prompt(cls, message, repeat=1, raw_input=Terminal.input):
    7168        response = None
    7269        while (repeat and not response):
     
    8077
    8178    @classmethod
    82     def prompt_with_multiple_lists(cls, list_title, subtitles, lists, can_choose_multiple=False, raw_input=input_func):
     79    def prompt_with_multiple_lists(cls, list_title, subtitles, lists, can_choose_multiple=False, raw_input=Terminal.input):
    8380        item_index = 0
    8481        cumulated_list = []
     
    120117
    121118    @classmethod
    122     def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=input_func):
     119    def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=Terminal.input):
    123120        print(list_title)
    124121        i = 0
     
    162159            pass
    163160
    164     def confirm(self, message=None, default=DEFAULT_YES, raw_input=input_func):
     161    def confirm(self, message=None, default=DEFAULT_YES, raw_input=Terminal.input):
    165162        if not message:
    166163            message = "Continue?"
  • trunk/Tools/Scripts/webkitpy/common/system/user_mock.py

    r250375 r280640  
    3030import sys
    3131
     32from webkitcorepy import Terminal
     33
    3234_log = logging.getLogger(__name__)
    33 
    34 if sys.version_info < (3, 0):
    35     input = raw_input
    3635
    3736
     
    3938
    4039    @classmethod
    41     def prompt(cls, message, repeat=1, raw_input=input):
     40    def prompt(cls, message, repeat=1, raw_input=Terminal.input):
    4241        return "Mock user response"
    4342
    4443    @classmethod
    45     def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=input):
     44    def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=Terminal.input):
    4645        pass
    4746
Note: See TracChangeset for help on using the changeset viewer.