IRC Logs for #circuits Tuesday, 2013-12-17

*** qwebirc84072 has joined #circuits01:13
*** qwebirc84072 has quit IRC01:13
*** clixxIO has joined #circuits01:14
clixxIOhello peoples01:15
clixxIOI stumbled across circuits, looks interesting01:16
prologichi :)01:18
clixxIOHi Prologic01:18
clixxIOI develop an click-together hardware system www.clixx.io01:19
prologicagh very nice :)01:20
prologiccircuits ia a "click together" component applicationn framework :)01:20
clixxIOI noticed that. Here's some more pictures
clixxIOI tried some event driven python from rpi.GPIO and thought it was pretty neat01:22
clixxIObut outgrew-it/ran-into-problems01:22
prologicthat's something I'm looking to add to the circuits component library actually01:22
prologica GPIO component01:22
prologicthat can read/write asynchronously from GPIO interfaces01:22
prologicI'd love it if you could bring that to the table!01:22
clixxIOI'm actually a (apparently not so good) software guy01:23
clixxIObut saw an opportunity to do some hardware01:24
clixxIOwhat country are you based in?01:24
prologicyeah I'm not so good with the hw side of things01:27
prologicI'm vision impaired (lost most of my sight in 2002)01:27
prologicso bit hard to see the teeny weeny components ;)01:27
clixxIOah ok01:28
clixxIOwhat I do is all at mostly the board level01:29
clixxIOas in produce boards that just plug in01:30
clixxIOwell I will have to play a lot more with your software01:31
prologicI like the Beagle Bond Black for that very reason01:32
prologicand probably will buy one soon to play with01:32
clixxIOThere's too many processors out there - I'm trying to get to them one at a time01:34
clixxIOI have a developer in Brisbane,
clixxIOdoes circuits use cherrypy?01:37
prologicagh nice :)01:42
prologicno circuits.web does not use CherryPy01:42
prologicit's it's own web framework01:42
prologicquite lightweight (reusing a lot of components - good reuse)01:42
prologicbut also quite feature rich/complete01:42
prologicabout ~6kloc01:42
prologicpower of circuits and decoupled loosely coupled components :)01:42
prologicThis is the component graph (visualized) for
clixxIOI'm just looking more into your project and through the pages you have up01:44
prologicone caveat :)01:46
prologicbe sure to use/read circuits-dev01:46
prologicwe have historically released very slowly01:46
prologicbut we're going to change that very soon with the upcoming 3.001:46
*** realz has quit IRC01:46
prologiccircuits' (btw) 10th year of dev is next year :)01:47
clixxIOwow, that's cool01:47
*** realz has joined #circuits01:47
clixxIOI have only been going with my project for two years01:47
clixxIOfirst I went to Japan, saw hardware being made/designed, thought I would try01:48
clixxIOdid that for a year01:48
clixxIOworked out I could do it that year01:48
clixxIOthen this year has been about finalising designs01:49
clixxIOselling however many boards I wanted to sell01:49
clixxIOnext year is a full move to sales01:49
clixxIObut I haven't had time to write a 'software-platform'01:51
prologicperhaps circuits can be your platform :)01:52
prologicthat you build upon01:52
clixxIOIt's looking like that at the moment.01:52
clixxIOActually what you have done far surpasses my skill level - you've got some nice specialty code01:53
clixxIOthe only thing wrong is that it looks like you don't have the 'right-hardware' for it :-)01:55
prologicyes circuits is developed on desktops01:59
prologicand cloud infrstructure01:59
prologictested against many platforms, etc01:59
prologicmany a folk have developed home automation systems with circuits02:00
prologicI had/have plans to try something like with with my RPi at home or a Beagle Bone Black02:00
prologicwith Serial and/or GPIO02:00
prologicbut I don't know if I'll have time over the holidays ;)02:00
prologicthere's a guy from SO recently in here the last few nights02:00
prologicattempting to use circuits for his robotos02:01
prologicwhatever hw/kit they are :)02:01
*** realz has quit IRC02:14
clixxIOwell I will have to learn it over the break, but it looks interesting02:24
prologiclook forward to it :)02:26
clixxIOwhere are the serial interface (examples)?02:47
clixxIOmy requirement is that I have like a tcp-ip chat server distributing to all clients02:49
clixxIOand some of the clients I'd like to have on serial ports also02:50
clixxIOwell it's installed now, just have to try it out more02:55
clixxIOnice meeting you02:59
*** clixxIO has quit IRC02:59
*** realzies has joined #circuits03:02
*** anunnaki has joined #circuits03:16
prologicehlo :)03:31
*** SX has joined #circuits06:05
prologichey SX06:42
SXis there any way to set timeout for waitEvent?06:50
prologicspecify a timeout kwarg06:53
SXhow to make sure that timeout occured?06:55
prologicthat is entirely another point altogether :)06:57
prologictbh I'm not sure :)06:57
prologicit's not supported yet06:57
prologicI've been tossing up between raising an exception06:57
prologicsetting an attribute on the event being waited for06:58
prologicwhat are your thoughts?06:58
prologichome time, chat at home in a couple hours07:02
prologicin the meantime07:02
prologicwhy don't you code that feature up for us? :)07:02
prologicI'm happy with raising an exception07:03
prologicbecause it can be caught by the event handler's code07:03
prologic   yield, timeout=5)07:03
prologicexcept Timeout:07:03
prologic   ...07:03
SXwell, it looks nice07:09
prologicok I'll be leaving in a few more mins07:09
prologicstill here :)07:09
prologicyeah see if you can hack it together07:09
prologicI'd appreciate it :)07:09
SXi think this would be better than if\else statements07:09
prologicyou need only modify circuits/core/manager.py07:09
prologiclook for def waitEvent(...)07:09
prologici agree07:09
prologicI think it's better to raise an exception07:09
prologictis the Python way :)07:09
prologicduck typing ftw :)07:09
SXand coz it's an exceptional situation =)07:10
prologicand it's intuitive to catch it in an event handler07:10
prologicor let the main event loop capture the error and fire an error event07:10
prologicso it will work seamlessly everywhere07:10
prologicI will put your name on the contributors list if you can get this done by the time I get home :)07:10
prologicit's a 2hr trip for me!07:10
SXoh! could u please answer one more q07:11
SXhow to check if connect failed?07:11
SXwith tcpclient07:11
SXit fires 'connected' even if server does not exist07:11
prologicjust write an error or disconnect event handler07:11
prologicI think it's disconnected() for clients07:11
prologicand disconnect() for servers07:11
prologicyou'll have to: pydoc
prologicSX: it fires 'connected' even if server does not exist <-- hmm yes07:12
prologicthis is a sore point currently for us07:12
prologicthis code was directly borrowed from Twisted07:12
prologicand this is what they do as well07:12
prologicdetermining asynchronously whether you're connected or not is quite hard (apparently)07:12
prologicthis is another issue we need to solve07:12
prologicminor albeiet07:12
prologicso in general what you should do is:07:13
prologicconnect (fire and forget)07:13
prologictry to write something07:13
prologicyou'll get an error followed by a disconnect07:13
prologicif that fails07:13
prologicwe _will_ try to figure out a way to make this "better"07:13
prologicbut I'm not 100% sure if there is a good overall solution that will work across any kind of tcp connection07:13
SXwhat loop does net use?07:13
prologicby default Select is used in circuits I think07:14
prologicbut you can use any of the other pollers yourself07:14
prologicyou just need to register one first07:14
prologicbecause any socket component registers the default one if it can't find on e in the system07:14
prologicso yeah07:14
prologicif you have any brilliant ideas :)07:14
prologicI've been discussing it with some of the other devs to length07:15
SXok, i'll look into it =)07:15
prologicsweeet :)07:17
prologicyou're a legend!07:17
prologicthen we can share the solution with Twisted :)07:17
prologicthey may have fixed this by now maybe07:18
prologicmaybe look at their codebase to see07:18
prologica lot of the I/O poller code was directly borrowed from twisted07:18
prologicbut not much else07:18
prologicdidn't want to have to discover all the edge case all over again :007:18
prologiclooks like we might soon have  a component too soon07:22
prologicyay :)07:22
*** litzomatic has joined #circuits08:53
litzomaticHello :)08:53
litzomaticI am a bit confused about Worker, task, and CallValue and how I am supposed to use them.08:55
litzomaticThe test_worker example is not working code as well :(08:56
litzomaticWhen I do the following:08:56
litzomatic        result =, 'worker')08:56
litzomatic        print(next(result))08:56
litzomatic        print(next(result))08:56
litzomaticI get:08:57
litzomatic{'event': None, 'run': False, 'timeout': -1, 'flag': False}08:57
litzomatic<circuits.core.manager.CallValue object at 0x10a5c0dd0>08:57
prologiceven'n all09:09
prologichey litzomatic09:09
prologicyou forgot the yield09:09
litzomaticI think the part I am not understanding is Future/Promise architecture09:09
prologicit's cooperative coroutines09:09
prologicnot automagical :)09:09
litzomaticlooking at the Value class atm09:09
prologicresult =, 'worker')09:09
prologicchange this to09:09
prologicresult = yield, 'worker')09:10
SXhi again!09:10
prologicyou're basically not yielding controoll back to the event loop09:10
prologichi SX :)09:10
prologicplain and simple09:10
prologiccircuits is constrainted by Pytohn's semantics09:10
prologicit's not a language :)09:10
prologicthat's what I'm designing mio-lang :)09:10
SXtimeout does not seem to work. it hangs on FallBackGenerator with self._continue.wait(10000)09:11
prologicshow me your patch/diff so far?09:11
prologicI'll do some testsing here09:11
prologicanyway bbs - dinner :)09:11
litzomatickk :)09:12
SXand why don't you use system timers? it's way better than expect your code to tick every N ms09:12
prologicOsso, ping?09:12
prologicOsso, can you help sort out this timeout issue with SX?09:12
prologicSX, we can :)09:12
prologicbut it should be optional09:12
litzomaticI get an Internal Server Error when I yield for some reason... hmm09:12
prologicor another component09:12
SXit should, of course09:12
prologicwe don't because well we didn't :)09:12
prologicbut there are times when you don't want to use the system timers09:13
prologicsay on a platform that doesn't support them09:13
prologiclitzomatic, paste?09:13
prologicshould see the entire traceback in the error09:13
SXbut when you really need precise intervals, it's the only way to go09:13
prologicyes I do agree :)09:14
prologicsystem timters via signals09:14
prologicis more precise than any event loop09:14
litzomaticdef complicated_task():09:14
litzomatic    """This is so complex I need a worker!"""09:14
litzomatic    import time09:14
litzomatic    time.sleep(3)09:14
prologic-however- ihmo it still should be built as a searpate component09:14
litzomatic    return 'Task worker ' + str(os.getpid())09:14
prologicor subclassing circuits.core.timers.Timer :)09:14
prologici.e: SystemTimer()09:14
prologicfeel free to send me a pull reuqest wiht it :)09:14
prologiclitzomatic, hrmm09:15
prologicwhere's self in the method params?09:15
prologicis this part of a component?09:15
prologicif you're mixing this with a web app09:15
prologichave a look test:09:15
litzomaticIts a methond in a Root(Controller) class that calls the yield.  The yield results in None (that prints out just fine)09:16
prologicwe don't have a unit test for this09:16
litzomaticbut then I get an internal server error09:16
prologictesting call/wait against circuits.web request handlers09:16
prologicI'd better write some :)09:17
prologicyeah ok09:17
prologiclet me eat dinner, and spend time with my wife09:17
prologicthen I'll try to sort this out ok :)09:17
prologicfirst thing is to write a simple test case09:17
litzomaticoh wait I sleep for 3 seconds in the worker and the yield returns right away09:17
prologicin the style of all the others in tests/web/*.py09:17
litzomaticmaybe that's the problem?09:17
prologicwell I'd still want to see that traceback09:18
prologicsounds lke a bug to me09:18
prologiccall/wait should work seamlessly everywhere09:18
prologicincluding circuits.web09:18
litzomaticI probably need to turn the debugger on to see the traceback?09:18
prologicit should be shown in the web page's response09:18
prologicbut yes09:18
prologicAdding Debugger().register(appp)09:18
prologicwill also start spitting oerrors our ont he console09:18
litzomaticIt isn't shown in the response, just "Internal Server Error"09:19
prologicbbs - dinner time :)09:19
prologicshould be!09:19
prologicanyway bbs :)09:19
prologicand don't worry!09:20
prologicthese are just small edge cases :)09:20
litzomaticyep, I'll see if I can get more info from the debugger. :) Thanks.09:20
*** litzomatic has quit IRC09:39
SXi think this happens because of this:09:44
SXelif len(self._tasks):09:45
SXif there's no tasks (and if there's no notifications pending), then timeout is set to -1 (default value)09:47
SXtime_left in event09:47
*** litzomatic has joined #circuits09:49
SXwaitEvent should generate some info for dispatcher to know if it should pause the thread10:11
SXbut timeout now is (N * 0.1 sec + time_for_all_other_events + error), not the value you set.10:13
*** qwebirc63783 has joined #circuits10:34
prologicok back10:35
prologicSX, hmmm10:35
prologicAre you talking about L522 of the manager?10:38
prologicI think that basically says10:39
prologicif we have tasks10:39
prologicset the time left to 010:39
prologic0.1 (the default)10:39
prologicso that taska are run iteratively every 0.1s10:39
SX                if remaining > 0 or len(self._queue) or not self._running:10:44
SX                    event.reduce_time_left(0)10:44
SX                elif len(self._tasks):10:44
SX                    event.reduce_time_left(TIMEOUT)10:44
SXis says if we only have tasks, set TO to TIMEOUT10:45
SXso if we do not have pending events and tasks, managers go to sleep10:46
SXwaitEvent does not generate events nor tasks10:47
SXso if I call waitEvent and do not fire anything, manager goes to sleep and _on_tick is not called even once before wait returns10:50
SXthe only correct way to fix this is to implement real timers to interrupt wait10:51
SXor loop every 100ms, which is waste of resources =)10:52
prologichold on10:52
prologicI think we're getting confused here10:52
prologicthe event loop is _meant_ to go to sleep for long periods of time10:52
prologicif there is nothing to do10:52
prologicwaitEvent is suppose to generate a task10:52
prologicso what's a miss here?10:52
prologicOsso, ping? :)10:52
prologicotherwise you'll end up with an event loop that eats cpu10:53
prologicwaitevent should in theory be trampolinging the event loop10:53
prologichold on :)10:53
prologicare we taking about fixing Timers?10:53
prologicor writing an exception raising capability for timed out waitinv events?10:54
SXfixing nonworking timeout10:54
prologicI think the dispatch has an edge case10:54
prologicisn't that a completely separate issue?10:54
prologicthat's the "how do we determine if we're connected?"10:54
litzomatichmm how is it nonworking?10:55
SX<SX> timeout does not seem to work. it hangs on FallBackGenerator with self._continue.wait(10000)10:55
litzomaticoh yeah, you said that way back :)10:55
SX<prologic> waitEvent is suppose to generate a task10:56
SXit is, when it's done10:56
SXnot when it's waiting for event to occur10:56
SXthe only thing waitEvent do is set a handler for generate_events10:57
SXso it's based on internal ticking mechanism10:58
prologicjuggling two things at once here10:58
prologichold on10:58
prologictrying to fix call/wait with the circuits.web dispatcher :)10:58
prologicso what are you proposing?10:59
SXwell, i see two simple ways to do the thing11:00
prologicI still don't understand what we're fixing :)11:00
SXself.waitEvent('myevent', timeout=2)11:00
prologicI thought we were implementing raise Timeout(event) for events that did not occurs during waitEvent() calls :)11:00
SXdoes not work at all11:00
SXtimeout does not occur11:00
prologiccan I ask something?11:01
prologichow are you testing this?11:01
SXwith default manager (component)11:01
prologicthat's it?11:01
prologicfrom circuits import Manager11:01
prologicm = Manager() + Debugger()11:01
prologicno other components/pollers/etc?11:01
prologicahhhh :)11:02
prologicnow I know where the confusino is11:02
prologicyou realize that the "timeout" kwarg11:02
prologicis not in fact a time interval of "timeout"11:02
prologicbut the no. of event loop cycles11:02
SXi know that11:02
prologicgood :)11:02
prologicso that doesn't work at all?11:02
prologicwith no pollers/timers in place?11:02
SXbut it's not how it should work11:02
prologichold on11:03
prologiclemme try this11:03
prologicso we're on the same page :)11:03
litzomatic<SX> Seperate topic, since you mentioned precision in timers.  I was reading something about the design of event loops being such that timers will not be precise by design, just close enough.  Umm, can't find the article I may have seen it in, but this SO post sums it up. I'm assuming server side eve11:03
litzomaticnt loops follow the same conventions.11:03
SXwell, we're talking about python library11:07
prologicI believe I broke something recently11:07
ircnotifier1 commit(s) pushed to circuits-dev11:08
ircnotifier00c872492236 by prologic: Fixed typo11:08
prologicso fixed that minor typo11:09
prologicnow you're absolutely right11:09
prologicor are you?11:09
prologic$ python test_timeout.py11:09
prologic<registered[*] (<Debugger/* 9096:MainThread (queued=0) [S]>, <App/* 9096:MainThread (queued=2) [R]> )>11:09
prologic<started[*] (<App/* 9096:MainThread (queued=1) [R]> )>11:09
prologic<foo[*] ( )>11:09
prologic<foo_done[*] (None )>11:09
prologicit does timeout at least11:10
prologichence the None being printed11:10
prologiclitzomatic, no timers will never be preice in the sense of hard real-time :)11:10
prologicit will always be "close enough"11:11
SXwhat do you mean by 'it does to'?11:16
*** litzomatic has quit IRC11:17
SXi doubt it ticks even once11:17
SXjust try waitEvent11:17
prologicI think I'm close to solveing this11:18
prologicit does in fact tick twice11:18
prologicthe correct number of times :)11:18
prologicbut the bug lies elsewhere11:18
prologicgimme 5mins? :)11:18
SXi told you where =)11:18
SX<SX> is says if we only have tasks, set TO to TIMEOUT11:19
SX<SX> so if we do not have pending events and tasks, managers go to sleep11:19
SX<SX> waitEvent does not generate events nor tasks11:19
SX<SX> so if I call waitEvent and do not fire anything, manager goes to sleep and _on_tick is not called even once before wait returns11:19
SXin fact, it works11:21
SXself._continue.wait(10000) sets the thread timeout to 10k secs, so after 10000 * timeout, it will stop waiting =)11:22
prologicthis is not so easy :)11:31
prologicyeah I'm just not seeing whaty ou're seeing though11:32
SXyeah, you can't catch this exception in user code11:32
prologicI see on_tick called twice11:32
prologicand the timeout reached :)11:32
prologicwithout waiting 10ks11:32
prologicunless I'm missing something here :(11:32
SXonly if you do something else with manager11:32
SXif the only thing you do is calling a wait method11:33
SXit will work as i said11:33
SXself._continue.wait(10000) sets the thread timeout to 10k secs, so after 10000 * timeout, it will stop waiting =)11:33
SXmanager sleeps as soon, as there's no tasks and events left11:35
SXwaiting for event does not wake it11:36
prologicgot it!11:43
prologiconly problem now that I see11:44
prologicis that the exception isn't bubbling up to the event handler11:44
prologicwhere the call/wait was made11:44
prologicI think I have to send the exception into the genereate11:45
*** litzomatic has joined #circuits12:03
SXevent handler works as a generator in this case12:04
SXso actual call() call is done on the level above the handler12:05
SXso it's not possible to handle the exception in event handler in this case12:06
prologicsoo close!12:07
prologicactually it is :)12:07
prologicwith g.throw()12:07
prologicjust getting confused as to which is the right generator to throw the exception to12:08
*** litzomatic has quit IRC12:08
SXi'm still new to Python12:08
prologicthat's okay!12:14
prologicargg man12:14
prologicI'm a bit stuck :)12:14
qwebirc63783hi all, I try to use circuits with the tutorial But I can't use Ctrl + C to interrupt a MyComponent().run() (I use the interactive shell  or IPython shell of winpython 3.3.2/64bit). Any Hint?12:33
qwebirc63783Or isn't it possible to use circuits in interactive shell mode? (Im quite new to python too :) )12:36
prologicoh wow12:44
prologicI can't get this to throw the exception inside the generator12:45
prologicI have the right generator now!12:45
prologicqwebirc63783, hi12:45
prologicPlease use circuits-dev12:45
prologicYou can install this via:12:45
prologicpip install -e hg+
prologic2.1.0 is very outdated and we're putting together a 3.0 release soon12:46
prologicqwebirc63783> Or isn't it possible to use circuits in interactive shell mode? (Im quite new to python too :) ) <--- you can12:46
prologicnot the typilca use case though :)12:46
prologicusually I only do it to quickly test something12:46
SXthe right generator is parent generator of a generator that throws an exception =)12:54
SXbut I think the point is to throw it asynchronously12:54
prologicSX, why don't you have a go? :)12:57
prologicthis is as close as I've gotten12:57
prologicjust pushing changes now12:57
ircnotifier1 commit(s) pushed to circuits-dev12:57
ircnotifier7de8b2be53e5 by prologic: Trying to implement exceptions for timed out events when using call/wait12:57
prologicit works (almost)12:57
prologicbut the event never gets capturesd by the parent task12:57
prologicthe parent.throw(...) doesn't seem to work12:57
prologicparent in this case is a generator of the started event handler12:58
prologicin the sample test I pasted before12:58
prologichave a look at the diff anyway12:58
prologicsee what you think12:58
prologicit _does_ timeout :)12:58
prologicbut doesn't quite get to the right handler that did the call/wait12:59
prologicand where the event timedout12:59
prologicyou expect this to work:12:59
prologic    x = yield
prologicexcept TimeoutError:12:59
prologic   ...12:59
prologicbut the exception doesn't make it there12:59
prologicnot sure why :/12:59
SXi made it work13:01
SXbut it breaks the mechanism of task processing13:01
*** litzomatic has joined #circuits13:02
SXby completing the handler in processTask13:02
prologicahh well that's not good :)13:02
prologiclet's marry the two changes together somehwo?13:03
prologicwhat did you do differently?13:03
prologiccall/wait are essentially treated as lightweight coroutines in circuits13:03
prologicso that's why my diff13:03
prologicgenerator.throw() at the right spot13:03
SXjust added this13:03
SXif isinstance(task, GeneratorType) and isinstance(parent, GeneratorType):13:03
SX                self.unregisterTask((event, parent, None))13:03
SX                parent.throw(e)13:03
SXin processTask13:03
SXin ANY exception handling part13:04
prologiccan you rebase your changes on top of mine?13:04
prologichappy to give you write access to the repo13:05
prologicit's communal dev13:05
SXnot worth it13:05
SXthe goal now is to throw an exception instead of proceeding an execution13:06
*** litzomatic has quit IRC13:06
SXi mean not to call gen.next13:06
SXbut gen.throw13:06
SXit's no good to commit half-done changes =)13:09
qwebirc63783thanks, I will try the dev version13:09
prologicI don't follow strict revision control styles like some :)13:10
prologicsorry if that offends you!13:10
prologiceasier if there's only one repo to collection colaborated changes together13:11
prologiceaiser sharing :)13:11
prologicqwebirc63783, no problems!13:11
prologicqwebirc63783, also please read the dev docs13:11
prologicSX, brb gonna have a shower13:12
prologicand do some thinking about it13:12
prologicdid I mention async programming is hard to get right :)13:12
prologicnot to mention we're mixing in coroutintes into this as well!13:12
prologicI really wouldn't mind cleaning up all this call/wait/task code too13:12
prologicit's a bit hard to understand :/13:13
qwebirc63783thanks for the hint, I will post a message if it works, verison 3.0 for christmas? :b13:14
prologiclikely yes :)13:16
prologicI'm trying to push 3.0 out soon13:16
prologicbefore out 10th year of dev next year13:16
prologicbeen doing this a long time :/13:17
prologicwant 3.0 to be nicely polished13:17
SXprologic, the error you were talking about is with helpers.FallbackErrorHandler._on_error13:28
SXit does not have channels attribute13:28
prologicsorry what error?13:30
prologicthe lack of error reporting?13:30
SXyou said you broke something13:33
prologicoh I fixed that13:33
prologicit was a typoe with removing an event handler13:33
SXoh, ok =)13:33
prologichow do we get this exception up into the event handler calling call or wait13:34
SXi made a task with exception value13:38
SXit works13:38
SXbut for some reason stop() does not work anymore =)13:38
prologicthis is why we have 250+ unit tests :)13:39
SXwell, i gtg, bb in 2 hours13:39
prologicI think I figured it out!13:41
qwebirc63783doesn't work yet :(13:41
prologicI've bubbled it up too far!13:41
prologicit's bubbling up to the run() method13:41
prologicqwebirc63783, sorry what doesn't work?13:41
prologicwhat are you doing?13:41
prologicSX, nps13:41
SXi caught the excptn in processTask13:41
qwebirc63783I  unistalled the circuits with pip uninstall13:41
SXand made a new task to report in the next tick13:42
qwebirc63783and then add the run our command pip install -e hg+
qwebirc63783when I import circuits it still report version 2.113:45
qwebirc63783with circuits.__version__13:45
prologicSX, ahh :)13:46
qwebirc63783and __date__  -> 24th February 201313:46
prologicI said circuits-dev13:46
prologicnot circuits13:46
prologicpip install -e hg+
*** SX has quit IRC13:47
prologicwe've historically maintained two main branches13:47
prologicand "circuits" has always been histroically an year old13:47
prologicbut we're changing this in 3.013:47
prologicwiht continious releases :)13:47
*** litzomatic has joined #circuits13:54
litzomaticprologic did you have a chance to look into the worker stuff?13:55
prologicyes just briefly13:56
litzomaticIn you have an test_worker that does not work :)13:57
prologicbefore SX side tracked me with getting TimeoutError exceptions to work for timedo out events13:57
prologicwhen using call/wait :)13:57
prologicI've verified it's a bug with the circuits.web dispatcher13:57
litzomaticIts not even valid Python code haha.13:57
prologicspecifically in the request_value_changed event handler13:57
prologicyou want the test case that demonstreates it?13:57
litzomaticah ok. :)13:57
prologicdon't look at that code :)13:58
prologicthat's old and possibly broken :)13:58
litzomaticThe in examples13:58
prologictest_worker works in dev13:58
prologicin dev?13:58
litzomaticwell... it's invalid syntax even.13:58
litzomaticoh neverminde the docstring counts as pass13:59
litzomaticbut you cannot import Task13:59
litzomaticbecause it is task13:59
prologiclong story short13:59
prologicwe used to (current in 2.1.0) have event names such as14:00
prologicand they'd get uncameled into foo_bar_baz event handlers14:00
prologicit kinda sucked14:00
prologicwe decided we should change this in 3.014:00
litzomaticit should be Task though14:00
prologichence the major version no.14:00
prologicpretty sure it's task() :)14:00
litzomaticIMO ;) to be PEP814:00
prologicall event in circuits are lower-case14:00
prologicyeah no14:00
prologicthink about it :)14:00
prologicthink about the confusion of what I just said14:00
prologicusers always got confused14:01
prologicclass FooBazBaz(Event): --> @handler("foo+_bar_baz")14:01
prologicso we changed it to14:01
prologicclass foobarbaz(Event): -> @handler("foobarbaz")14:01
prologicevent handlers now match their event names14:01
prologicwait what14:02
prologicwhere are you seeing Task?14:02
prologicI fixed all the event names in dev ages ago :)14:02
prologicman 3.0 cannot come out soon enough :)14:03
prologicthe differences between 2.1.0 and 3.0 are confusing people I think :)14:03
litzomatichmm I saw the implementation of task and it went like class task:14:04
litzomaticwasn't like the other camel case methods that are being reassinged to lowercase14:04
litzomaticand underscored.14:04
litzomaticin workers.py14:04
litzomaticclass task(Event)14:05
litzomaticMaybe that is why it is not working I'm using that class?14:06
litzomaticna it's the one that is in the main __init__ once I trace through the code.14:06
prologic    @handler("stopped", "unregistered", channel="*")14:07
prologic    def _on_stopped(self, event, *args):14:07
prologic 14:07
prologicyou mean like this?14:07
prologicthe method's bound name is irrielevant14:07
prologicit's what's in @handler() that's important14:07
prologic@handler(*names, **options)14:08
litzomaticdo I have a old version of the code, this doesn't match...14:09
qwebirc63783:/ no luck today,14:10
qwebirc63783the installation went well14:11
qwebirc63783but still I can't stop the .run() with Ctrl+C14:11
qwebirc63783I use WinPython-64bit-
prologiclitzomatic, possibly?14:12
prologicdid you clone dev?14:12
prologicqwebirc63783, oh Windows?14:12
prologicoh cripes :)14:13
prologicwe do CI testing against Windows14:13
prologicbut none of our devs are Windows devs14:13
qwebirc63783the new version is 3.0.0.dev14:13
prologicwhat are you typing into the REPL?14:13
prologicso got the right version :)14:13
*** litzomatic has quit IRC14:13
qwebirc63783Yes 2nd time right :)14:14
*** litzomatic has joined #circuits14:14
prologicshow me what you're doing?14:14
litzomaticyeah I should probably just install using :)14:15
prologiclitzomatic, I have good news and bad14:15
prologicI know why call/wait doesn't work in circuits.web's dispatcher14:15
qwebirc63783I just open an interactive shell (Python 3.3.2) and run the code14:15
prologicbut I don't know how to fix it right now14:15
litzomaticAh, why is the important part :)14:16
qwebirc63783from circuits import Component  class MyComponent(Component):     def started(self, *args):         print("Hello World!")  MyComponent().run()14:16
prologiclitzomatic, well you can work around it14:16
prologicI do :)14:16
prologicit would be nice to get working14:16
prologicit's not so much a bug as a missing feature14:16
prologiclet me show you14:17
qwebirc63783, 3th example14:17
prologicL130 of circuits/web/dispatchers/dispatcher.py14:17
prologicvalue.promise is True here14:17
prologicfor tests/web/test_call_wait.py14:17
prologicit then just throws a httperror for that14:18
prologicas it doesn't handle it :/14:18
prologicI'm not sure how to handle it14:18
prologicI need to get notification of the yield (yield, "aoo")) in the test case somehow14:18
prologicand feed that back nito the response14:18
prologicand it's getting late :/14:18
prologicWed Dec 18 00:18:53 EST 201314:18
litzomaticThat's fine I got stuff to do this morning related to work :(14:19
qwebirc63783I will try it at home on linux, I should go back to work :) I will give you a message tomorrow14:20
prologicthis _does_ work14:20
prologicnot sure why it hangs for you14:20
prologicthe ^C part14:20
litzomaticwhy does this download an old repo14:20
litzomaticpip3 install hg+
litzomaticinstalls old code still :(14:21
prologicI blame pip! :)14:21
prologicdon't you need -e?14:21
litzomaticna that worked :)14:21
litzomaticbut i install the same code as you sent me with -e14:21
prologicwe know what the issue is14:22
prologicwe can therefore fix it14:22
litzomaticpip3 install -e hg+
litzomaticis old code for some reason too14:22
litzomaticit's blowing my mind :(14:22
litzomatichave to install with I guess.14:22
qwebirc63783I will try it on linux and blame MS later :)14:23
litzomaticfor the install? I'm on a mac :)14:24
litzomaticif you navigate to that URL it IS actually the old code, somehow.14:24
litzomaticbut when I remove the #egg=circuits it is still the old code...14:24
litzomaticthrough pip14:25
litzomaticbut not through the browser.14:25
prologichow odd14:25
prologicI blame bitbucket then14:25
prologichang on14:25
prologiclemme check14:25
prologicdefinatly new code14:26
prologicand on dev14:26
litzomaticwait... it is the old code I was wrong about the hash14:26
litzomatic vs
litzomaticprologic/circuits-dev has the new code :)14:27
prologicmy personal branch should norammly always be identical to circuits/circuits-dev14:27
prologicand it is here14:27
prologicwhy kind of weird ass caching do you have going on? :)14:27
prologicI'm so confused :/14:27
litzomaticyou are right14:28
litzomaticyours is identical14:28
litzomaticis new!14:29
litzomaticwell it has class Task in upper case14:30
litzomaticI'm confused which way should it be?14:30
litzomaticok, prologic sorry for confusing you while you were tired, I think it was changed from class Task -> class task?  So dev is actually working?14:31
litzomaticJust the example worker example is out of date.14:32
litzomaticoh that isn't even in dev14:33
prologic is 2.1.014:35
prologicdev will be merged into that soon14:35
prologicand it will all become 3.014:35
prologicit is task() from here on14:35
prologicevery event name is identical to their handlers14:36
prologicwe chose lowercase or lower_case14:36
litzomaticOk, yeah I cloned 2.1.0 examples... to work on dev... that is my confusion. !!14:36
prologicso that the methods/handlers were PEP8 compliant14:36
prologicbut it's impossbile to make both :)14:36
prologicno wonder things did not work so well for you :)14:36
prologicmakes sense :)14:36
litzomaticI see14:37
prologicdid I nuke the example worker in dev?14:37
prologicI should bring that back14:37
prologicamybe I thought it was a stupid example :)14:37
litzomaticIt wasn't very clear you can improve it :)14:37
prologicprobably why I deleted it14:37
prologicglad we got that confusino out of the way14:37
prologicthere are two main repos14:38
prologicone is a year old :)14:38
prologicdon't use it!14:38
prologicunless you plan to do the mergeing and release for me :)14:38
prologicyeah ok I think I'm going to go to bed14:38
prologicthis is doing my head in14:38
prologicthese two edge cases14:38
litzomaticAlright, I'll bug you tomorrow about workers some more :)14:38
prologicthe promise call/wait not working with the circuits.web dispatcher14:38
prologicand the TimedoutError14:39
prologiccan't be perfect right? :)14:39
litzomatichaha good night ! :)14:39
prologiclet me quickly write a working example of it14:39
prologicone tick14:39
ircnotifier2 commit(s) pushed to circuits-dev14:48
ircnotifier5d6810edf4a3 by prologic: Added failing test case for using call/wait with circuits.web's default dispatcher14:48
ircnotifier9eede7bddbe6 by prologic: Added simple example of using Worker in process mode14:48
prologicthere you go14:48
litzomaticsweet :)14:48
litzomaticgotta get ready to go so I'll have to look when I get back, thanks!14:49
qwebirc63783Windows + Python + Ctrl C is a mess, maybe it's a problem with my setup14:51
prologiclitzomatic, some updated14:53
ircnotifier2 commit(s) pushed to circuits-dev14:53
ircnotifier271c872005bc by prologic: Add Debugger to factorial example to show how it works14:53
ircnotifierc95cdbcbd733 by prologic: Demonstrate that Worker(s) are async and participate in events by making the factorial example really really slow14:53
prologiclitzomatic, don't worry about the call/wait stuff no working so well with circuits.web14:54
prologicyou _can_ work around it14:54
prologichave a look at examples/web/terminal14:54
prologicfor a comet-style example14:54
prologicnot pretty (ihmo)14:54
prologicbut you can delay/postpone fireing response events14:55
litzomaticso I can use that as a work around?14:55
prologicfor now14:55
prologiccall/wait are convenient though14:56
prologicso I'd like to make them work too14:56
litzomaticJust curious when you think it might be fixed.14:56
prologicyou could also do things like14:56
prologicwhen you get a payment request14:56
prologicqueue it up and store some state about it14:56
prologicfire a task() event per item in queue14:57
prologicand when you receive the matching task_complete event, lookup it's details in te queue14:57
prologicget the response object out14:57
prologicand fire a response14:57
prologicso it's all possible14:57
prologicjust that call/wait would have made it less boilerplate perhaps14:57
prologicI'll have anohter bash tomorrow night14:57
prologicand I'm on holidays as of this Friday14:58
prologicso I'll be doing lots of work on this14:58
litzomatichmm I think I understand at a very high level.  Event based on the backend will be a struggle for me14:58
prologicyeah :/14:58
prologicit takes some getting used to "hang of"14:58
litzomaticI've got a decent operating systems background so threads/processes mutexes are pretty natural for me at this point.14:58
prologicyeah I subscribe to the micro-kernel approach14:59
prologicwhere everything is asynchrnoous14:59
litzomaticyeah, let the operating systems guys figure out the hard shit :)14:59
prologicalso share nothing, scale big15:00
prologicno one's forcing you to use circuits :)15:00
prologicI will fix this regardless15:00
prologicbecause programmers like to have a synchronous api15:00
prologiceven if it's async undereath15:00
prologicnot all programmers are nuters like me15:01
litzomaticSome people, especially front end guys, just seem to like and understand the event stuff on the backend though, and I see its merits for simple architecture for dispatching requests and message passing.15:01
prologicwho can wrap their heads around event flots :)15:01
litzomaticJust got to get used to the new abstractions.15:01
prologicit isn't hard15:01
prologicbut I'm biased :015:01
prologiceveryone that comes here15:01
prologicalways says how elegant circuits is15:01
prologicand how much easier it is than twisted15:02
prologicI think folks can't get around Deferreds15:02
prologicnow that does your head in!15:02
prologicdoes my head in too15:02
prologicand Python doesn't have grammar to support15:02
prologic(e.g: in JvaaScript)15:02
litzomaticyeah, I looked at twisted, and I will probably have to dig into it more once if i land this new job.15:02
prologicobj.on_success = function() {15:03
prologic    ...15:03
prologicso it makes chaning deferreeds harder in twisted15:03
litzomaticso I will be an event loop pro, soon, possibly :)15:03
prologicand hard to follow15:03
prologicnice :)15:03
litzomaticDid you watch guido's talk on event loops?15:03
prologicI actually know a *lot* about twisted15:03
litzomaticat the last pycon15:03
prologicwe have (ready)15:03
prologica twisted+circuits integration15:03
prologictwisted apps can (rightnow) run on top of circuits15:03
prologicand circuits can _use_ twisted protocols15:04
prologiclitzomatic> Did you watch guido's talk on event loops? <-- yes15:04
prologicwhen Python 2.6/2.7 become obsolte15:04
litzomaticyeah, interesting stuff.15:04
prologiccircuits will switch to the std. event loop in the std. lib15:04
prologicbut until then circuits is on it's own15:04
prologicina  league of it's own too15:04
litzomaticPython3 estimated to start going mainstream in the next 3 years15:05
litzomaticso 10 years?15:05
prologicmore like 10 :)15:05
prologic2.7 will stay for a long time15:05
prologicI'm glad you've found this edge case too15:06
litzomaticyou'll probably implement it well before then, just for the hell of it ;)15:06
prologicand brought it up15:06
prologicbecause I _want_ to make things as easy as possible15:06
prologicwith as little boiler plate as possible15:06
prologiccircuits has to be like putting electrnoic cirtry together15:06
prologicplug 'n play15:06
litzomaticyeah, that is the main thing that people hate about event loops that are hardened programmers, they think the abstractions are too much and too complicated.15:06
litzomaticZed Shaw seems to be in that camp.15:07
prologicoh well :)15:07
prologicI don't think so15:07
litzomaticbut it's a bit close minded to expect everyone to learn operating systems concepts at a low level this day in age.15:07
prologicwell and they don't scale15:07
prologicso it's not very practical15:07
prologicwhatever you want to call them15:08
litzomaticAnd event loops are much better for certain applications.15:08
prologicaren't all that great15:08
prologicthey serve a particular purpose15:08
prologicwhich is why circuits has components to handle these things15:08
prologicthe core of circuits is a message bus15:08
prologicthen the component classes15:08
prologicand registration15:08
litzomaticyeah.  That's what I like, it's a much easier way to do concurrency.15:08
prologiceverything else is just a compoent15:08
prologicwith a set of interfaces (events/handlers)15:08
prologicme too :)15:09
prologicmy project at work15:09
prologicvisualizing climate model data at 1km scale15:09
prologicacross all of australia15:09
prologicthe dataset is 400GB and 16.7M files15:10
prologictakes 4 days to pre-generate the data for the ui15:10
prologicthen there's the circuits.web app (above)15:10
prologicand it's RESTful backend api15:10
prologicusing JSON Schema15:10
prologicwrong link :)15:11
litzomaticyeah, and if you need to do some low level stuff later on to optimize something... well you can do it then and still save time because you understand the problem domain better.15:11
litzomaticI'm a huge fan of optimize later...15:11
litzomaticbecause hardware does it for us in the meantime :)15:11
litzomaticI'll have to take a look at this15:12
prologicjust yet another example web app15:12
prologiccircuits is pertty much like this15:12
prologicoh you want a Root page15:12
prologicoh you want to serve up static files15:12
litzomaticYeah, I'm very interested in data visualization.15:13
prologicnow we want to compress things15:13
prologicand so on15:13
prologicwant logging15:13
litzomaticCan gain such a good understanding of tough concepts when designed well.15:13
litzomaticWell, I better get ready to go :)  Minnesota driving is sub par at best...15:14
qwebirc63783Me again, It works with python 2.7 (WinPython-32bit-, I need to check my setup on an other computer15:16
prologiclitzomatic, fixed15:18
ircnotifier1 commit(s) pushed to circuits-dev15:18
ircnotifier754793ae6716 by prologic: Fixed call/wait with circuits.web dispatcher15:18
prologicqwebirc63783, if it works with 2.715:18
prologicthen it might be a 3.3. bug15:19
prologicor a bug with how we do things with Python3 and circuits15:19
prologicwe support Python2/3 in a single codebase15:19
prologicusing six module15:19
prologiclitzomatic, call/wait with circuits.web is fixed15:19
qwebirc63783I started to learn python with python 3 a couple of weeks ago, but to test some libs i think i have to switch to python 2.715:23
prologicI'd recommend you stick with 2.715:24
ircnotifier1 commit(s) pushed to circuits-dev15:24
ircnotifier025bdd4d7fbe by prologic: Distinguish between Debugger/Default error handling and the unhandled version when exceptions go unaucht (should never happen)15:24
prologicsimply because of that very reason :)15:24
prologicnot all libraries and 3rd-party modules will work all that well15:24
prologiccircuits does support Python315:24
prologicand is regularly tested against it15:24
prologicbut a) we don't use or have access to windows machines15:24
prologicb) Python 3 is not a main development platform15:25
prologicif you'd like to become our primary windows dev for circuits15:25
prologicwe'd appreciate that :)15:25
prologicthere are several features that just simply cannot work on Windows15:25
prologicand so they end up not being available15:25
prologicand get disabled15:25
prologicon that note I'm off to bed15:26
prologicWed Dec 18 01:26:43 EST 201315:26
prologicI've fixed a missing feature/bug for litzomatic15:26
prologicalmost got TimeoutError exceptions to work15:27
qwebirc63783thanks, b) :b15:27
prologica good night overall :)15:27
prologicg'night :)15:27
litzomaticprologic Nice! I'll probably be able to spend some time tonight playing with workers a bit more.15:27
litzomaticgood night!15:27
prologicoh wait15:27
prologicnot g'night yet :)15:27
prologicyeah turns out I really am tired15:27
prologicand forgot to register the App(0 to the webapp in ym test case15:27
prologicand wondering why I coudl not get any value back from the call/wait15:28
prologicstupid me15:28
prologicso turns out supporting this was easy15:28
prologicelif value.promise:15:28
prologic    value.event.notify = True15:28
prologiceverything else just magically works15:28
prologicI love that about circuits15:28
prologicso you'll only get a 500 internal server error15:29
prologicin the most impossible case ever15:29
prologicbasically never15:29
litzomaticI think you've said good night for about 2 hours at this point :)15:29
prologicI'm off :)15:29
prologichappy circuiting15:29
litzomaticgood night,15:30
litzomaticthanks for all the discussion.15:30
*** litzomatic has quit IRC15:45
*** litzomatic has joined #circuits15:46
*** qwebirc63783 has quit IRC15:48
*** litzomatic has quit IRC15:50
*** litzomatic has joined #circuits16:18
*** litzomatic has quit IRC16:22
*** litzomatic has joined #circuits16:31
*** ircnotifier has quit IRC16:31
*** litzomatic has quit IRC16:39
*** ircnotifier has joined #circuits17:35
*** qwebirc3375 has joined #circuits19:00
SXmy task exception throw implementation19:12
SXand some simple code to test it:
*** Osso has quit IRC20:54
*** Osso has joined #circuits21:00
*** litzomatic has joined #circuits21:04
prologicSX, seems to be too many unwanted changes in your version21:13
prologicwhen I compare it to mine21:13
prologichard to tell how you're is different exaclty21:13
prologicwhat editor are you using? :)21:13
prologicbbs - going to work21:13
prologictalk then21:13
prologicalso whilst yours works21:14
prologicit doesn't handle timeout > 021:14
prologicwhereas mine does21:14
*** vilmisolga has joined #circuits21:34
*** vilmisolga has quit IRC21:41
*** litzomatic has quit IRC23:00
*** litzomatic has joined #circuits23:00
prologicheya all23:26
prologicat work :)23:26

Generated by 2.11.0 by Marius Gedminas - find it at!