[3.13] gh-111201: Support pyrepl on Windows (GH-119559) (GH-119850)

(cherry picked from commit 0d07182821)

Co-authored-by: Dino Viehland <dinoviehland@gmail.com>
Co-authored-by: Anthony Shaw <anthony.p.shaw@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
Miss Islington (bot) 2024-05-31 17:18:28 +02:00 committed by GitHub
parent 6e57bd01e0
commit d6faac6d1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 1019 additions and 49 deletions

View file

@ -19,10 +19,18 @@
from __future__ import annotations
import sys
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
TYPE_CHECKING = False
if TYPE_CHECKING:
from typing import IO
@dataclass
class Event:
evt: str
@ -36,6 +44,25 @@ class Console(ABC):
height: int = 25
width: int = 80
def __init__(
self,
f_in: IO[bytes] | int = 0,
f_out: IO[bytes] | int = 1,
term: str = "",
encoding: str = "",
):
self.encoding = encoding or sys.getdefaultencoding()
if isinstance(f_in, int):
self.input_fd = f_in
else:
self.input_fd = f_in.fileno()
if isinstance(f_out, int):
self.output_fd = f_out
else:
self.output_fd = f_out.fileno()
@abstractmethod
def refresh(self, screen: list[str], xy: tuple[int, int]) -> None: ...
@ -108,5 +135,4 @@ class Console(ABC):
...
@abstractmethod
def repaint(self) -> None:
...
def repaint(self) -> None: ...