File: interp_stderrprinter.py

package info (click to toggle)
pypy3 7.0.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 111,848 kB
  • sloc: python: 1,291,746; ansic: 74,281; asm: 5,187; cpp: 3,017; sh: 2,533; makefile: 544; xml: 243; lisp: 45; csh: 21; awk: 4
file content (70 lines) | stat: -rw-r--r-- 2,153 bytes parent folder | download
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 = unicode(self.getaddrstring(space))
        return space.newunicode(u"<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),
)