collin-lucky7 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +65 -0
- data/Rakefile.rb +55 -0
- data/config/environment.rb +9 -0
- data/lib/jabs.rb +9 -0
- data/lib/jass.rb +23 -0
- data/lib/jsspec/example.html.jass +180 -0
- data/lib/jsspec/layout.html.haml +14 -0
- data/lib/lucky7.rb +5 -0
- data/lib/lucky7/builder.rb +140 -0
- data/lib/lucky7/renders.rb +9 -0
- data/rspec/fixtures/lucky7/build/app/layout.html +4 -0
- data/rspec/fixtures/lucky7/src/app/_category.html.haml +2 -0
- data/rspec/fixtures/lucky7/src/app/_header.html.haml +7 -0
- data/rspec/fixtures/lucky7/src/app/_page_link.html.haml +2 -0
- data/rspec/fixtures/lucky7/src/app/_pagination.html.haml +3 -0
- data/rspec/fixtures/lucky7/src/app/_result.html.haml +3 -0
- data/rspec/fixtures/lucky7/src/app/_result_set.html.haml +4 -0
- data/rspec/fixtures/lucky7/src/app/_side_bar.html.haml +3 -0
- data/rspec/fixtures/lucky7/src/app/behavior.css.sass +3 -0
- data/rspec/fixtures/lucky7/src/app/controller.js.jabs +3 -0
- data/rspec/fixtures/lucky7/src/app/fixture_spec.html.jass +6 -0
- data/rspec/fixtures/lucky7/src/app/layout.html.haml +4 -0
- data/rspec/fixtures/lucky7/src/app/no_results.html.haml +10 -0
- data/rspec/fixtures/lucky7/src/app/results.html.haml +5 -0
- data/rspec/jabs/jabs_engine_spec.rb +3 -0
- data/rspec/jabs/jabs_precompiler_spec.rb +50 -0
- data/rspec/jabs_spec.rb +15 -0
- data/rspec/jabs_spec_helper.rb +2 -0
- data/rspec/jass/jass_engine_spec.rb +1 -0
- data/rspec/jass/jass_precompiler_spec.rb +49 -0
- data/rspec/jass_spec.rb +15 -0
- data/rspec/lucky7/builder_spec.rb +322 -0
- data/rspec/lucky7/renders_spec.rb +13 -0
- data/rspec/lucky7_spec.rb +19 -0
- data/rspec/lucky7_spec_helper.rb +1 -0
- data/rspec/spec_helper.rb +3 -0
- data/templates/environment/[environment].rb +1 -0
- data/templates/skeleton/[application]/README +1 -0
- data/templates/skeleton/[application]/Rakefile.rb +1 -0
- data/templates/skeleton/[application]/environment/environment.rb +1 -0
- data/vendor/jquery/jquery-1.2.6.js +3549 -0
- data/vendor/jquery/jquery-1.2.6.min.js +32 -0
- data/vendor/jquery/jquery-1.2.6.pack.js.gz +11 -0
- data/vendor/jquery/jquery.simulate.js +152 -0
- data/vendor/js_spec/JSSpec.css +224 -0
- data/vendor/js_spec/JSSpec.js +1548 -0
- data/vendor/js_spec/copying +459 -0
- data/vendor/js_spec/demo.html +210 -0
- data/vendor/js_spec/diff_match_patch.js +1 -0
- data/vendor/js_spec/example.spec.html +198 -0
- data/vendor/js_spec/exp/build.properties +1 -0
- data/vendor/js_spec/exp/build.xml +9 -0
- data/vendor/js_spec/exp/lib/diff_match_patch.js +1 -0
- data/vendor/js_spec/exp/lib/js.jar +0 -0
- data/vendor/js_spec/exp/src/JSSpec2.js +356 -0
- data/vendor/js_spec/exp/src/JSSpec2_spec.js +238 -0
- data/vendor/js_spec/sample/datetime/String_Parser.html +22 -0
- data/vendor/js_spec/sample/datetime/datetime.js +24 -0
- data/vendor/orbited/ez_setup.py +272 -0
- data/vendor/orbited/pyevent-0.3/Makefile +18 -0
- data/vendor/orbited/pyevent-0.3/build/lib.linux-i686-2.5/event.so +0 -0
- data/vendor/orbited/pyevent-0.3/build/temp.linux-i686-2.5/event.o +0 -0
- data/vendor/orbited/pyevent-0.3/changes +9 -0
- data/vendor/orbited/pyevent-0.3/cvs/Entries +9 -0
- data/vendor/orbited/pyevent-0.3/cvs/Repository +1 -0
- data/vendor/orbited/pyevent-0.3/cvs/Root +1 -0
- data/vendor/orbited/pyevent-0.3/event.c +2516 -0
- data/vendor/orbited/pyevent-0.3/event.pyx +280 -0
- data/vendor/orbited/pyevent-0.3/license +29 -0
- data/vendor/orbited/pyevent-0.3/readme +12 -0
- data/vendor/orbited/pyevent-0.3/setup.py +61 -0
- data/vendor/orbited/pyevent-0.3/test.py +73 -0
- data/vendor/orbited/ruby-orbited.rb +84 -0
- metadata +188 -0
@@ -0,0 +1,280 @@
|
|
1
|
+
#
|
2
|
+
# event.pyx
|
3
|
+
#
|
4
|
+
# libevent Python bindings
|
5
|
+
#
|
6
|
+
# Copyright (c) 2004 Dug Song <dugsong@monkey.org>
|
7
|
+
# Copyright (c) 2003 Martin Murray <murrayma@citi.umich.edu>
|
8
|
+
#
|
9
|
+
# $Id: event.pyx,v 1.12 2005/09/12 03:16:15 dugsong Exp $
|
10
|
+
|
11
|
+
"""event library
|
12
|
+
|
13
|
+
This module provides a mechanism to execute a function when a
|
14
|
+
specific event on a file handle, file descriptor, or signal occurs,
|
15
|
+
or after a given time has passed.
|
16
|
+
"""
|
17
|
+
|
18
|
+
__author__ = ( 'Dug Song <dugsong@monkey.org>',
|
19
|
+
'Martin Murray <mmurray@monkey.org>' )
|
20
|
+
__copyright__ = ( 'Copyright (c) 2004 Dug Song',
|
21
|
+
'Copyright (c) 2003 Martin Murray' )
|
22
|
+
__license__ = 'BSD'
|
23
|
+
__url__ = 'http://monkey.org/~dugsong/pyevent/'
|
24
|
+
__version__ = '0.3'
|
25
|
+
|
26
|
+
import sys
|
27
|
+
|
28
|
+
cdef extern from "Python.h":
|
29
|
+
void Py_INCREF(object o)
|
30
|
+
void Py_DECREF(object o)
|
31
|
+
|
32
|
+
ctypedef void (*event_handler)(int fd, short evtype, void *arg)
|
33
|
+
|
34
|
+
cdef extern from "event.h":
|
35
|
+
struct timeval:
|
36
|
+
unsigned int tv_sec
|
37
|
+
unsigned int tv_usec
|
38
|
+
|
39
|
+
struct event_t "event":
|
40
|
+
int ev_fd
|
41
|
+
int ev_flags
|
42
|
+
void *ev_arg
|
43
|
+
|
44
|
+
void event_init()
|
45
|
+
void event_set(event_t *ev, int fd, short event,
|
46
|
+
event_handler handler, void *arg)
|
47
|
+
void evtimer_set(event_t *ev, event_handler handler, void *arg)
|
48
|
+
int event_add(event_t *ev, timeval *tv)
|
49
|
+
int event_del(event_t *ev)
|
50
|
+
int event_dispatch()
|
51
|
+
int event_loop(int loop)
|
52
|
+
int event_pending(event_t *ev, short, timeval *tv)
|
53
|
+
|
54
|
+
int EVLOOP_ONCE
|
55
|
+
int EVLOOP_NONBLOCK
|
56
|
+
|
57
|
+
EV_TIMEOUT = 0x01
|
58
|
+
EV_READ = 0x02
|
59
|
+
EV_WRITE = 0x04
|
60
|
+
EV_SIGNAL = 0x08
|
61
|
+
EV_PERSIST = 0x10
|
62
|
+
|
63
|
+
__event_exc = None
|
64
|
+
|
65
|
+
cdef int __event_sigcb():
|
66
|
+
return -1
|
67
|
+
|
68
|
+
cdef void __event_handler(int fd, short evtype, void *arg):
|
69
|
+
(<object>arg).__callback(evtype)
|
70
|
+
|
71
|
+
cdef void __simple_event_handler(int fd, short evtype, void *arg):
|
72
|
+
(<object>arg).__simple_callback(evtype)
|
73
|
+
|
74
|
+
cdef class event:
|
75
|
+
"""event(callback, arg=None, evtype=0, handle=None) -> event object
|
76
|
+
|
77
|
+
Create a new event object with a user callback.
|
78
|
+
|
79
|
+
Arguments:
|
80
|
+
|
81
|
+
callback -- user callback with (ev, handle, evtype, arg) prototype
|
82
|
+
arg -- optional callback arguments
|
83
|
+
evtype -- bitmask of EV_READ or EV_WRITE, or EV_SIGNAL
|
84
|
+
handle -- for EV_READ or EV_WRITE, a file handle, descriptor, or socket
|
85
|
+
for EV_SIGNAL, a signal number
|
86
|
+
"""
|
87
|
+
cdef event_t ev
|
88
|
+
cdef object handle, evtype, callback, args
|
89
|
+
cdef float timeout
|
90
|
+
cdef timeval tv
|
91
|
+
|
92
|
+
def __init__(self, callback, arg=None, short evtype=0, handle=-1,
|
93
|
+
simple=0):
|
94
|
+
cdef event_handler handler
|
95
|
+
|
96
|
+
self.callback = callback
|
97
|
+
self.args = arg
|
98
|
+
self.evtype = evtype
|
99
|
+
self.handle = handle
|
100
|
+
if simple:
|
101
|
+
handler = __simple_event_handler
|
102
|
+
else:
|
103
|
+
handler = __event_handler
|
104
|
+
if evtype == 0 and not handle:
|
105
|
+
evtimer_set(&self.ev, handler, <void *>self)
|
106
|
+
else:
|
107
|
+
if not isinstance(handle, int):
|
108
|
+
handle = handle.fileno()
|
109
|
+
event_set(&self.ev, handle, evtype, handler, <void *>self)
|
110
|
+
|
111
|
+
def __simple_callback(self, short evtype):
|
112
|
+
cdef extern int event_gotsig
|
113
|
+
cdef extern int (*event_sigcb)()
|
114
|
+
global __event_exc
|
115
|
+
try:
|
116
|
+
if self.callback(*self.args) != None:
|
117
|
+
if self.tv.tv_sec or self.tv.tv_usec:
|
118
|
+
event_add(&self.ev, &self.tv)
|
119
|
+
else:
|
120
|
+
event_add(&self.ev, NULL)
|
121
|
+
except:
|
122
|
+
__event_exc = sys.exc_info()
|
123
|
+
event_sigcb = __event_sigcb
|
124
|
+
event_gotsig = 1
|
125
|
+
# XXX - account for event.signal() EV_PERSIST
|
126
|
+
if not (evtype & EV_SIGNAL) and \
|
127
|
+
not event_pending(&self.ev, EV_READ|EV_WRITE|EV_SIGNAL|EV_TIMEOUT, NULL):
|
128
|
+
Py_DECREF(self)
|
129
|
+
|
130
|
+
def __callback(self, short evtype):
|
131
|
+
cdef extern int event_gotsig
|
132
|
+
cdef extern int (*event_sigcb)()
|
133
|
+
global __event_exc
|
134
|
+
try:
|
135
|
+
self.callback(self, self.handle, evtype, self.args)
|
136
|
+
except:
|
137
|
+
__event_exc = sys.exc_info()
|
138
|
+
event_sigcb = __event_sigcb
|
139
|
+
event_gotsig = 1
|
140
|
+
if not event_pending(&self.ev, EV_READ|EV_WRITE|EV_SIGNAL|EV_TIMEOUT, NULL):
|
141
|
+
Py_DECREF(self)
|
142
|
+
|
143
|
+
def add(self, float timeout=-1):
|
144
|
+
"""Add event to be executed after an optional timeout.
|
145
|
+
|
146
|
+
Arguments:
|
147
|
+
|
148
|
+
timeout -- seconds after which the event will be executed
|
149
|
+
"""
|
150
|
+
if not event_pending(&self.ev, EV_READ|EV_WRITE|EV_SIGNAL|EV_TIMEOUT,
|
151
|
+
NULL):
|
152
|
+
Py_INCREF(self)
|
153
|
+
self.timeout = timeout
|
154
|
+
if timeout >= 0.0:
|
155
|
+
self.tv.tv_sec = <long>timeout
|
156
|
+
self.tv.tv_usec = (timeout - <float>self.tv.tv_sec) * 1000000.0
|
157
|
+
event_add(&self.ev, &self.tv)
|
158
|
+
else:
|
159
|
+
self.tv.tv_sec = self.tv.tv_usec = 0
|
160
|
+
event_add(&self.ev, NULL)
|
161
|
+
|
162
|
+
def pending(self):
|
163
|
+
"""Return 1 if the event is scheduled to run, or else 0."""
|
164
|
+
return event_pending(&self.ev, EV_TIMEOUT|EV_SIGNAL|EV_READ|EV_WRITE, NULL)
|
165
|
+
|
166
|
+
def delete(self):
|
167
|
+
"""Remove event from the event queue."""
|
168
|
+
if self.pending():
|
169
|
+
event_del(&self.ev)
|
170
|
+
Py_DECREF(self)
|
171
|
+
|
172
|
+
def __dealloc__(self):
|
173
|
+
self.delete()
|
174
|
+
|
175
|
+
def __repr__(self):
|
176
|
+
return '<event flags=0x%x, handle=%s, callback=%s, arg=%s>' % \
|
177
|
+
(self.ev.ev_flags, self.handle, self.callback, self.args)
|
178
|
+
|
179
|
+
cdef class read(event):
|
180
|
+
"""read(handle, callback, *args) -> event object
|
181
|
+
|
182
|
+
Simplified event interface:
|
183
|
+
Create a new read event, and add it to the event queue.
|
184
|
+
|
185
|
+
Arguments:
|
186
|
+
|
187
|
+
handle -- file handle, descriptor, or socket
|
188
|
+
callback -- user callback with (*args) prototype, which can return
|
189
|
+
a non-None value to be rescheduled
|
190
|
+
*args -- optional callback arguments
|
191
|
+
"""
|
192
|
+
def __init__(self, handle, callback, *args):
|
193
|
+
event.__init__(self, callback, args, EV_READ, handle, simple=1)
|
194
|
+
self.args = args # XXX - incref
|
195
|
+
self.add()
|
196
|
+
|
197
|
+
cdef class write(event):
|
198
|
+
"""write(handle, callback, *args) -> event object
|
199
|
+
|
200
|
+
Simplified event interface:
|
201
|
+
Create a new write event, and add it to the event queue.
|
202
|
+
|
203
|
+
Arguments:
|
204
|
+
|
205
|
+
handle -- file handle, descriptor, or socket
|
206
|
+
callback -- user callback with (*args) prototype, which can return
|
207
|
+
a non-None value to be rescheduled
|
208
|
+
*args -- optional callback arguments
|
209
|
+
"""
|
210
|
+
def __init__(self, handle, callback, *args):
|
211
|
+
event.__init__(self, callback, args, EV_WRITE, handle, simple=1)
|
212
|
+
self.args = args # XXX - incref
|
213
|
+
self.add()
|
214
|
+
|
215
|
+
cdef class signal(event):
|
216
|
+
"""signal(sig, callback, *args) -> event object
|
217
|
+
|
218
|
+
Simplified event interface:
|
219
|
+
Create a new signal event, and add it to the event queue.
|
220
|
+
XXX - persistent event is added with EV_PERSIST, like signal_set()
|
221
|
+
|
222
|
+
Arguments:
|
223
|
+
|
224
|
+
sig -- signal number
|
225
|
+
callback -- user callback with (*args) prototype, which can return
|
226
|
+
a non-None value to be rescheduled
|
227
|
+
*args -- optional callback arguments
|
228
|
+
"""
|
229
|
+
def __init__(self, sig, callback, *args):
|
230
|
+
event.__init__(self, callback, args, EV_SIGNAL|EV_PERSIST,
|
231
|
+
sig, simple=1)
|
232
|
+
self.args = args # XXX - incref
|
233
|
+
self.add()
|
234
|
+
|
235
|
+
cdef class timeout(event):
|
236
|
+
"""timeout(secs, callback, *args) -> event object
|
237
|
+
|
238
|
+
Simplified event interface:
|
239
|
+
Create a new timer event, and add it to the event queue.
|
240
|
+
|
241
|
+
Arguments:
|
242
|
+
|
243
|
+
secs -- event timeout in seconds
|
244
|
+
callback -- user callback with (*args) prototype, which can return
|
245
|
+
a non-None value to be rescheduled
|
246
|
+
*args -- optional callback arguments
|
247
|
+
"""
|
248
|
+
def __init__(self, secs, callback, *args):
|
249
|
+
event.__init__(self, callback, args, simple=1)
|
250
|
+
self.args = args # XXX - incref
|
251
|
+
self.add(secs)
|
252
|
+
|
253
|
+
def init():
|
254
|
+
"""Initialize event queue."""
|
255
|
+
event_init()
|
256
|
+
|
257
|
+
def dispatch():
|
258
|
+
"""Dispatch all events on the event queue."""
|
259
|
+
global __event_exc
|
260
|
+
event_dispatch()
|
261
|
+
if __event_exc:
|
262
|
+
raise __event_exc[0], __event_exc[1], __event_exc[2]
|
263
|
+
|
264
|
+
def loop(nonblock=False):
|
265
|
+
"""Dispatch all pending events on queue in a single pass."""
|
266
|
+
cdef int flags
|
267
|
+
flags = EVLOOP_ONCE
|
268
|
+
if nonblock:
|
269
|
+
flags = EVLOOP_ONCE|EVLOOP_NONBLOCK
|
270
|
+
event_loop(flags)
|
271
|
+
|
272
|
+
def abort():
|
273
|
+
"""Abort event dispatch loop."""
|
274
|
+
cdef extern int event_gotsig
|
275
|
+
cdef extern int (*event_sigcb)()
|
276
|
+
event_sigcb = __event_sigcb
|
277
|
+
event_gotsig = 1
|
278
|
+
|
279
|
+
# XXX - make sure event queue is always initialized.
|
280
|
+
init()
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
Copyright (c) 2004 Dug Song <dugsong@monkey.org>
|
3
|
+
Copyright (c) 2003 Martin Murray <murrayma@citi.umich.edu>
|
4
|
+
All rights reserved, all wrongs reversed.
|
5
|
+
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
7
|
+
modification, are permitted provided that the following conditions
|
8
|
+
are met:
|
9
|
+
|
10
|
+
1. Redistributions of source code must retain the above copyright
|
11
|
+
notice, this list of conditions and the following disclaimer.
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright
|
13
|
+
notice, this list of conditions and the following disclaimer in the
|
14
|
+
documentation and/or other materials provided with the distribution.
|
15
|
+
3. The names of the authors and copyright holders may not be used to
|
16
|
+
endorse or promote products derived from this software without
|
17
|
+
specific prior written permission.
|
18
|
+
|
19
|
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
20
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
21
|
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
22
|
+
THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
23
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
24
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
25
|
+
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
26
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
27
|
+
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
28
|
+
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
#
|
3
|
+
# $Id: setup.py,v 1.7 2005/09/12 03:44:04 dugsong Exp $
|
4
|
+
|
5
|
+
from distutils.core import setup, Extension
|
6
|
+
import glob, os, sys
|
7
|
+
|
8
|
+
if glob.glob('/usr/lib/libevent.*'):
|
9
|
+
print 'found system libevent for', sys.platform
|
10
|
+
event = Extension(name='event',
|
11
|
+
sources=[ 'event.c' ],
|
12
|
+
libraries=[ 'event' ])
|
13
|
+
elif glob.glob('%s/lib/libevent.*' % sys.prefix):
|
14
|
+
print 'found installed libevent in', sys.prefix
|
15
|
+
event = Extension(name='event',
|
16
|
+
sources=[ 'event.c' ],
|
17
|
+
include_dirs=[ '%s/include' % sys.prefix ],
|
18
|
+
library_dirs=[ '%s/lib' % sys.prefix ],
|
19
|
+
libraries=[ 'event' ])
|
20
|
+
else:
|
21
|
+
ev_dir = None
|
22
|
+
l = glob.glob('../libevent*')
|
23
|
+
l.reverse()
|
24
|
+
for dir in l:
|
25
|
+
if os.path.isdir(dir):
|
26
|
+
ev_dir = dir
|
27
|
+
break
|
28
|
+
if not ev_dir:
|
29
|
+
raise "couldn't find libevent installation or build directory"
|
30
|
+
|
31
|
+
print 'found libevent build directory', ev_dir
|
32
|
+
ev_srcs = [ 'event.c' ]
|
33
|
+
ev_incdirs = [ ev_dir ]
|
34
|
+
ev_extargs = []
|
35
|
+
ev_extobjs = []
|
36
|
+
ev_libraries = []
|
37
|
+
|
38
|
+
if sys.platform == 'win32':
|
39
|
+
ev_incdirs.extend([ '%s/WIN32-Code' % ev_dir,
|
40
|
+
'%s/compat' % ev_dir ])
|
41
|
+
ev_srcs.extend([ '%s/%s' % (ev_dir, x) for x in [
|
42
|
+
'WIN32-Code/misc.c', 'WIN32-Code/win32.c',
|
43
|
+
'log.c', 'event.c' ]])
|
44
|
+
ev_extargs = [ '-DWIN32', '-DHAVE_CONFIG_H' ]
|
45
|
+
ev_libraries = [ 'wsock32' ]
|
46
|
+
else:
|
47
|
+
ev_extobjs = glob.glob('%s/*.o' % dir)
|
48
|
+
|
49
|
+
event = Extension(name='event',
|
50
|
+
sources=ev_srcs,
|
51
|
+
include_dirs=ev_incdirs,
|
52
|
+
extra_compile_args=ev_extargs,
|
53
|
+
extra_objects=ev_extobjs,
|
54
|
+
libraries=ev_libraries)
|
55
|
+
|
56
|
+
setup(name='event',
|
57
|
+
version='0.3',
|
58
|
+
author='Dug Song, Martin Murray',
|
59
|
+
url='http://monkey.org/~dugsong/pyevent',
|
60
|
+
description='event library',
|
61
|
+
ext_modules = [ event ])
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
import glob, os, signal, sys, time, unittest
|
4
|
+
sys.path.insert(0, glob.glob('./build/lib.*')[0])
|
5
|
+
import event
|
6
|
+
|
7
|
+
class EventTest(unittest.TestCase):
|
8
|
+
def setUp(self):
|
9
|
+
event.init()
|
10
|
+
|
11
|
+
def test_timeout(self):
|
12
|
+
def __timeout_cb(ev, handle, evtype, ts):
|
13
|
+
now = time.time()
|
14
|
+
assert int(now - ts['start']) == ts['secs'], 'timeout failed'
|
15
|
+
print 'test_timeout'
|
16
|
+
ts = { 'start':time.time(), 'secs':5 }
|
17
|
+
ev = event.event(__timeout_cb, arg=ts)
|
18
|
+
ev.add(ts['secs'])
|
19
|
+
event.dispatch()
|
20
|
+
|
21
|
+
def test_timeout2(self):
|
22
|
+
def __timeout2_cb(start, secs):
|
23
|
+
dur = int(time.time() - start)
|
24
|
+
assert dur == secs, 'timeout2 failed'
|
25
|
+
print 'test_timeout2'
|
26
|
+
event.timeout(5, __timeout2_cb, time.time(), 5)
|
27
|
+
event.dispatch()
|
28
|
+
|
29
|
+
def test_signal(self):
|
30
|
+
def __signal_cb(ev, sig, evtype, arg):
|
31
|
+
if evtype == event.EV_SIGNAL:
|
32
|
+
ev.delete()
|
33
|
+
elif evtype == event.EV_TIMEOUT:
|
34
|
+
os.kill(os.getpid(), signal.SIGUSR1)
|
35
|
+
print 'test_signal'
|
36
|
+
event.event(__signal_cb, handle=signal.SIGUSR1,
|
37
|
+
evtype=event.EV_SIGNAL).add()
|
38
|
+
event.event(__signal_cb).add(2)
|
39
|
+
event.dispatch()
|
40
|
+
|
41
|
+
def test_signal2(self):
|
42
|
+
def __signal2_cb(sig):
|
43
|
+
if sig:
|
44
|
+
event.abort()
|
45
|
+
else:
|
46
|
+
os.kill(os.getpid(), signal.SIGUSR1)
|
47
|
+
print 'test_signal2'
|
48
|
+
event.signal(signal.SIGUSR1, __signal2_cb, signal.SIGUSR1)
|
49
|
+
event.timeout(2, __signal2_cb)
|
50
|
+
|
51
|
+
def test_read(self):
|
52
|
+
def __read_cb(ev, fd, evtype, pipe):
|
53
|
+
buf = os.read(fd, 1024)
|
54
|
+
assert buf == 'hi niels', 'read event failed'
|
55
|
+
print 'test_read'
|
56
|
+
pipe = os.pipe()
|
57
|
+
event.event(__read_cb, handle=pipe[0],
|
58
|
+
evtype=event.EV_READ).add()
|
59
|
+
os.write(pipe[1], 'hi niels')
|
60
|
+
event.dispatch()
|
61
|
+
|
62
|
+
def test_read2(self):
|
63
|
+
def __read2_cb(fd, msg):
|
64
|
+
assert os.read(fd, 1024) == msg, 'read2 event failed'
|
65
|
+
print 'test_read2'
|
66
|
+
msg = 'hello world'
|
67
|
+
pipe = os.pipe()
|
68
|
+
event.read(pipe[0], __read2_cb, pipe[0], msg)
|
69
|
+
os.write(pipe[1], msg)
|
70
|
+
event.dispatch()
|
71
|
+
|
72
|
+
if __name__ == '__main__':
|
73
|
+
unittest.main()
|