File: interp_stderrprinter.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (70 lines) | stat: -rw-r--r-- 2,140 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import errno, os

from pypy.interpreter.baseobjspace import W_Root
from pypy.interpreter.error import wrap_oserror
from pypy.interpreter.gateway import interp2app, unwrap_spec
from pypy.interpreter.typedef import GetSetProperty, TypeDef


class W_StdErrPrinter(W_Root):
    @staticmethod
    @unwrap_spec(fd='c_int')
    def descr_new(space, w_subtype, fd):
        return W_StdErrPrinter(fd)

    def __init__(self, fd):
        self.fd = fd

    def descr_repr(self, space):
        addrstring = self.getaddrstring(space)
        return space.newtext("<StdErrPrinter(fd=%d) object at 0x%s>" %
                                (self.fd, addrstring))

    def descr_noop(self, space):
        pass

    def descr_fileno(self, space):
        return space.newint(self.fd)

    def descr_isatty(self, space):
        try:
            res = os.isatty(self.fd)
        except OSError as e:
            raise wrap_oserror(space, e)
        return space.newbool(res)

    def descr_write(self, space, w_data):
        # Encode to UTF-8-nosg.
        data = space.text_w(w_data)

        try:
            n = os.write(self.fd, data)
        except OSError as e:
            if e.errno == errno.EAGAIN:
                return space.w_None
            raise wrap_oserror(space, e)
        return space.newint(n)

    def descr_get_closed(self, space):
        return space.newbool(False)

    def descr_get_encoding(self, space):
        return space.w_None

    def descr_get_mode(self, space):
        return space.newtext('w')


W_StdErrPrinter.typedef = TypeDef("StdErrPrinter",
    __new__ = interp2app(W_StdErrPrinter.descr_new),
    __repr__ = interp2app(W_StdErrPrinter.descr_repr),
    close = interp2app(W_StdErrPrinter.descr_noop),
    flush = interp2app(W_StdErrPrinter.descr_noop),
    fileno = interp2app(W_StdErrPrinter.descr_fileno),
    isatty = interp2app(W_StdErrPrinter.descr_isatty),
    write = interp2app(W_StdErrPrinter.descr_write),

    closed = GetSetProperty(W_StdErrPrinter.descr_get_closed),
    encoding = GetSetProperty(W_StdErrPrinter.descr_get_encoding),
    mode = GetSetProperty(W_StdErrPrinter.descr_get_mode),
)