Commit Graph

3083 Commits (5976d68bb218578e2d6928bda8fef0d33a54d2aa)

Author SHA1 Message Date
Tyler Goodlet f9d9d7c1ba Add option chain quote support! 2018-11-11 21:05:30 -05:00
Tyler Goodlet 666228d82e Add initial QT stock quoting tests 2018-11-11 18:53:45 -05:00
Tyler Goodlet 82c8fca983 Use tractor.run_daemon() for pikerd 2018-10-18 13:49:20 -04:00
Tyler Goodlet e108bc4521 Must pass a main async func to tractor 2018-09-05 18:31:10 -04:00
Tyler Goodlet 2349de8314 Rename watchlist app to 'monitor' 2018-08-23 23:12:39 -04:00
goodboy 73b153b6fd
Merge pull request #55 from pikers/mktcap_sorting
Fix mktcap sorting
2018-08-23 11:31:43 -04:00
Tyler Goodlet 421cc4731f Face palm - fix mktcap sorting
Yuh think maybe the default "null" value shouldn't be a string...?

Fixes #46
2018-08-22 23:02:08 -04:00
Tyler Goodlet b2acfdaf42 Fix `pairs` type annotation 2018-08-22 23:01:34 -04:00
Tyler Goodlet 96b17e16ac Handle stale token case on network outage reconnect 2018-08-22 23:01:14 -04:00
goodboy e9921949af
Merge pull request #54 from pikers/tractor_updates
Tractor updates
2018-08-10 11:09:31 -04:00
Tyler Goodlet cbc1052bfe Update tests for new tractor api 2018-08-09 22:43:50 -04:00
Tyler Goodlet 957f1f4b02 Update pipfiles 2018-08-09 22:11:00 -04:00
Tyler Goodlet f3ac5e3c5f Port to latest tractor api 2018-08-09 21:54:02 -04:00
goodboy 6dbd919914
Merge pull request #51 from pikers/decouple_tractor
Decouple tractor
2018-07-20 13:25:31 -04:00
Tyler Goodlet e0a127e8eb Update pipfiles; point to tractor on GH 2018-07-18 14:34:26 -04:00
Tyler Goodlet da0495816b Drop tractor unit tests 2018-07-06 17:27:42 -04:00
Tyler Goodlet 3efc7a4f77 Pass through loglevel to tractor 2018-07-06 17:26:45 -04:00
Tyler Goodlet 4427e2869c Cancel symbol unsub if brokerd is already down 2018-07-06 17:26:24 -04:00
Tyler Goodlet 6c977cfb7b Port broker core to tractor; fix chan unsub bug 2018-07-06 17:25:40 -04:00
Tyler Goodlet 31b8277f08 Drop tractor modules 2018-07-06 17:19:25 -04:00
goodboy 6ff871ff7d
Merge pull request #50 from pikers/tractor_draft
Introducing "tractor"
2018-07-05 15:52:53 -04:00
Tyler Goodlet 94e7083bfc `tractor.run()` is required for testing now 2018-07-05 15:33:02 -04:00
Tyler Goodlet f4a91a4975 Always do symbol unsubscribe on teardown 2018-07-05 15:31:52 -04:00
Tyler Goodlet 73eedfd7b3 Set tractor actor name at startup 2018-07-05 15:31:21 -04:00
Tyler Goodlet aa259433f5 Don't bother unsetting the squeue; let errors propogate up 2018-07-05 15:30:31 -04:00
Tyler Goodlet 0ac564dbf3 Only cancel channel spawned rpc tasks when explicitly notified 2018-07-05 15:27:02 -04:00
Tyler Goodlet e395845ddb Every ticker-chan subscription must include a caller id 2018-07-05 15:23:38 -04:00
Tyler Goodlet 5383dd6446 Add a working arbiter registry system
Every actor now registers (and unregisters) with the arbiter at
startup/teardown. For now the registry is stored in a plain `dict` in
the arbiter's memory. This makes it possible to easily coordinate actors
started as plain Python processes or via `multiprocessing`.

A whole smörgåsbord of changes was required to accomplish this:
- factor handshake steps into a func
- track *every* channel connected to an actor including multiples to the
  same remote peer (may want to optimize this later)
- handle `trio.ClosedStreamError` gracefully in the message loop
- add an `open_portal` asynccontextmanager which handles channel
  creation, handshaking, and spawning a bg task for msg processing
- add a `start_actor()` for starting in-process actors directly
- add working `get_arbiter()` and `find_actor()` public routines
- `_main` now tries an anonymous channel connect to the stated
  arbiter sockaddr and uses that to determine whether to crown itself
2018-07-04 14:34:25 -04:00
Tyler Goodlet 1d3fde4a4d Add StreamQueue.connected() 2018-07-04 03:16:00 -04:00
Tyler Goodlet ddf27e5e7f Cancel GUI updates on exit 2018-07-04 03:14:54 -04:00
Tyler Goodlet 5d6b9d138c Update lock file 2018-06-27 15:38:06 -04:00
Tyler Goodlet 23830d51d1 Log either kwarg 2018-06-27 11:59:02 -04:00
Tyler Goodlet 4ecfcdc354 Port `piker watch` to tractor api 2018-06-27 11:52:56 -04:00
Tyler Goodlet e22f17bfe9 Port watchlist app to tractor api 2018-06-27 11:50:02 -04:00
Tyler Goodlet f32ecb3d65 Arbiter now supports non-empty statespace 2018-06-27 11:45:21 -04:00
Tyler Goodlet 266518a734 Handle kb interrupt gracefully in sub-actors
Fail gracefully (by "aborting") the same way `trio` does. This avoids
ugly sub-proc tracebacks thrown at the console. Unset the local actor
when `tractor._main` completes. Cancel all tasks for a peer channel on
disconnect.
2018-06-27 11:34:22 -04:00
Tyler Goodlet 8019296c67 Port broker daemon to tractor
Drop all channel/connection handling from the core and break up all the
start up steps into compact and useful functions. The main difference is
the daemon now only needs to worry about spawning per broker streaming
tasks and handling symbol list subscription requests.
2018-06-26 17:55:52 -04:00
Tyler Goodlet c0d8d4fd99 Support re-entrant calls to `get_arbiter()`
It gets called more then once when using `tractor.run()` and
then `find_actor()`. Also, allow passing in the log level to each
new spawned subactor.
2018-06-25 17:41:30 -04:00
Tyler Goodlet 8c5af7fd97 Drop console logging - messes with other tests 2018-06-23 15:33:33 -04:00
Tyler Goodlet c062b01b7b Add an actor spawning test
Test that the actor nursery API and ``tractor.run`` entrypoint work when
the sub-actor's main task is all that is run (i.e. no rpc requests).
2018-06-23 14:59:31 -04:00
Tyler Goodlet fa8418f97f Port stream_quotes to tractor ipc protocol 2018-06-23 14:57:02 -04:00
Tyler Goodlet 37eb8a8552 Fix actor nursery __exit__ handling
When an error is raised inside a nursery block (in the local actor)
cancel all spawned children and ensure the error is properly
unsuppressed.

Also,
- change `invoke_cmd` to `send_cmd` and expect the caller to use
  `result_from_q` (avoids implicit blocking for responses that might
  never arrive)
- `nursery.start()` the channel server block such that we wait for the
  underlying listener to spawn before making outbound connections
- cancel the channel server when an actor's main task completes
  (given that `outlive_main == False`)
- raise subactor errors directly in the local actors's msg loop
- enforce that `treat_as_gen` async functions respond with a caller id
  (`cid`) in each yield packet
2018-06-23 14:57:02 -04:00
Tyler Goodlet 84cd29644e Add reliable subactor lifetime control 2018-06-23 14:57:02 -04:00
Tyler Goodlet ef90d7f106 Add remote actor error handling and parent re-raising
Command requests are sent out and responses are handled in a "message
loop" where each command is associated with a "caller id" and multiple
cmds and results are multiplexed on the came inter-actor channel. When
a cmd result arrives it is pushed into a local queue and delivered to the
appropriate calling actor's task. Errors from a remote actor are always shipped
in an "error" packet back to their spawning-parent actor such that any error
in a subactor is always raised directly in the parent. Based on the
first response to a cmd (either a 'return' or 'yield' packet) the caller
side portal will retrieve values by wrapping the local response queue in
either of an async function or generator as appropriate.
2018-06-23 14:41:10 -04:00
Tyler Goodlet 75996fed0d Use trace level for packet contents 2018-06-23 14:40:49 -04:00
Tyler Goodlet b908bd0b9d Add uid,event attrs to `Channel` 2018-06-23 14:40:49 -04:00
Tyler Goodlet fa0aefff4d Take that QT nulls 2018-06-12 15:33:11 -04:00
Tyler Goodlet acb5dc398e Add a basic `tractor.run()` test 2018-06-12 15:23:58 -04:00
Tyler Goodlet bf2f6769fc Uhhh make everything better 2018-06-12 15:17:48 -04:00
Tyler Goodlet 5a997d67d4 Add an initial `tractor` price streaming test 2018-06-07 09:18:40 -04:00