Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10894 - main/trunk/pym/_emerge
Date: Wed, 02 Jul 2008 11:34:02
Message-Id: E1KE0ay-0002B4-MI@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-07-02 11:33:55 +0000 (Wed, 02 Jul 2008)
3 New Revision: 10894
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 Log:
8 Handle missing select.poll on interix by using select() to emulate a poll
9 object.
10
11
12 Modified: main/trunk/pym/_emerge/__init__.py
13 ===================================================================
14 --- main/trunk/pym/_emerge/__init__.py 2008-07-02 10:49:22 UTC (rev 10893)
15 +++ main/trunk/pym/_emerge/__init__.py 2008-07-02 11:33:55 UTC (rev 10894)
16 @@ -6813,6 +6813,61 @@
17 (self.blocks - self.blocks_satisfied))
18 return "".join(myoutput)
19
20 +class PollSelectFallback(object):
21 +
22 + """
23 + Use select to emulate a poll object, for
24 + systems that don't support poll().
25 + """
26 +
27 + def __init__(self):
28 + self._registered = {}
29 + self._select_args = [[], [], []]
30 +
31 + def register(self, fd, *args):
32 + """
33 + Only select.POLLIN is currently supported!
34 + """
35 + if len(args) > 1:
36 + raise TypeError(
37 + "register expected at most 2 arguments, got " + \
38 + repr(1 + len(args)))
39 +
40 + eventmask = select.POLLIN | select.POLLPRI | select.POLLOUT
41 + if args:
42 + eventmask = args[0]
43 +
44 + self._registered[fd] = eventmask
45 + self._select_args = None
46 +
47 + def unregister(self, fd):
48 + self._select_args = None
49 + del self._registered[fd]
50 +
51 + def poll(self, *args):
52 + if len(args) > 1:
53 + raise TypeError(
54 + "poll expected at most 2 arguments, got " + \
55 + repr(1 + len(args)))
56 +
57 + timeout = None
58 + if args:
59 + timeout = args[0]
60 +
61 + select_args = self._select_args
62 + if select_args is None:
63 + select_args = [self._registered.keys(), [], []]
64 +
65 + if timeout is not None:
66 + select_args = select_args[:]
67 + select_args.append(timeout)
68 +
69 + select_events = select.select(*select_args)
70 + poll_events = []
71 + for fd in select_events[0]:
72 + poll_events.append((fd, select.POLLIN))
73 + return poll_events
74 +
75 class Scheduler(object):
76
77 _opts_ignore_blockers = \
78 @@ -6873,7 +6928,12 @@
79 register=self._register, schedule=self._schedule,
80 unregister=self._unregister)
81 self._poll_event_handlers = {}
82 - self._poll = select.poll()
83 +
84 + try:
85 + self._poll = select.poll()
86 + except AttributeError:
87 + self._poll = PollSelectFallback()
88 +
89 from collections import deque
90 self._task_queue = deque()
91 self._running_tasks = set()
92
93 --
94 gentoo-commits@l.g.o mailing list