Lona Shell

The Lona shell is based on rlpython and can be started directly from the server process using --shell, when using script using app.run(shell=True) and a shell server and can be embedded using server.embed_shell() or LonaView.embed_shell().

The shell is a full python REPL and contains some use full commands prefixed with %lona_.

More information on all Lona shell commands: Lona Shell

Analyzing Views

%lona_views lists all running views, their runtime id, their thread id and their state.

>>> %lona_views

+-----------------+-----------------+-------+-----------------------------------------------+----------+-----------------------+-------------------+
| Runtime ID      | Thread ID       | Flags | User                                          | Route ID | URL                   | State             |
+-----------------+-----------------+-------+-----------------------------------------------+----------+-----------------------+-------------------+
| 190970657505620 | 140228157220608 |       | <AnonymousUser(Fs5Wv4ZA1445TJqgCXKLnMPp9EXZ)> | 26       | /events/click-events/ | WAITING_FOR_INPUT |
+-----------------+-----------------+-------+-----------------------------------------------+----------+-----------------------+-------------------+

When a valid runtime id is given all internal state of the runtime, the view and its Python stack are printed.

>>> %lona_views 190970657505620

Runtime Info
============
Thread ID: 140228157220608
Thread Name: LonaRuntimeWorker_1
View ID: 190970657505620
Multi user: False
Daemon: False
Started at: 2021-08-18 21:02:47.360176
Stopped at: -
State: WAITING_FOR_INPUT

View Info
=========
Name: ClickEventView
Path: /home/fsc/devel/lona/test_project/views/events/click_events.py
User: <AnonymousUser(Fs5Wv4ZA1445TJqgCXKLnMPp9EXZ)>
Route: <Route(/events/click-events/, views/events/click_events.py::ClickEventView)>
Match info: {}
Method: 'GET'
GET Data: {}
POST Data: {}

Connections
===========
                                        User: Connection
<AnonymousUser(Fs5Wv4ZA1445TJqgCXKLnMPp9EXZ)>: <lona.connection.Connection object at 0x7f89c84f6050>

Shortened Stack
===============
File "/home/fsc/devel/lona/test_project/views/events/click_events.py", line 61, in handle_request
    input_event = self.await_click(html=html)

When --memory is set, all variables in handle_request() are printed.

>>> %lona_views 191239324037030 --memory

View Memory
===========

File "/home/fsc/devel/lona/test_project/views/window_actions/set_title.py", line 27, in handle_request
    self.sleep(1)
+---------+----------------------------------------------------------------------------------------------------------------+
| Key     | Value                                                                                                          |
+---------+----------------------------------------------------------------------------------------------------------------+
| self    | </home/fsc/devel/lona/test_project/views/window_actions/set_title.py.WindowTitleView object at 0x7f89c851a090> |
| request | <lona.request.Request object at 0x7f89c851a150>                                                                |
|         |                                                                                                                |
| div     | <div data-lona-node-id="191239327756320">                                                                      |
|         |   Using set_title(); Title should be 'Title 2'                                                                 |
|         | </div>                                                                                                         |
|         |                                                                                                                |
| html    | <!--lona-widget:191239327428638-->                                                                             |
|         | <h2 data-lona-node-id="191239326942719">                                                                       |
|         |   Set Title                                                                                                    |
|         | </h2>                                                                                                          |
|         | <a data-lona-node-id="191239327193636" href="/">                                                               |
|         |   Back                                                                                                         |
|         | </a>                                                                                                           |
|         | <div data-lona-node-id="191239327756320">                                                                      |
|         |   Using set_title(); Title should be 'Title 2'                                                                 |
|         | </div>                                                                                                         |
|         | <!--end-lona-widget:191239327428638-->                                                                         |
|         |                                                                                                                |
| i       | 2                                                                                                              |
| title   | 'Title 2'                                                                                                      |
+---------+----------------------------------------------------------------------------------------------------------------+

Analyzing Threads

%threads lists all running Python threads.

>>> %threads

+-----------------+------------------------+-------+--------+-------------------------------------------------------------------------------------------------------+
| Thread ID       | Thread Name            | Alive | Daemon | Task                                                                                                  |
+-----------------+------------------------+-------+--------+-------------------------------------------------------------------------------------------------------+
| 139741524215552 | rlpython REPL Server   | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/socket.py:212 accept                                    |
| 139741507430144 | LonaWorker_0           | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/concurrent/futures/thread.py:78 _worker                 |
| 139741489948416 | LonaWorker_1           | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/concurrent/futures/thread.py:78 _worker                 |
| 139740988831488 | LonaRuntimeWorker_0    | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/threading.py:296 wait                                   |
| 139741561206592 | MainThread             | True  | False  | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/selectors.py:468 select                                 |
| 139741515822848 | ThreadPoolExecutor-0_0 | True  | True   | /home/fsc/devel/lona/test_project/env/lib/python3.7/site-packages/rlpython/commands/threads.py:85 run |
| 139741498951424 | ThreadPoolExecutor-0_1 | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/concurrent/futures/thread.py:78 _worker                 |
| 139741481555712 | LonaWorker_2           | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/concurrent/futures/thread.py:78 _worker                 |
| 139741473163008 | LonaWorker_3           | True  | True   | /home/fsc/.pyenv/versions/3.7.9/lib/python3.7/concurrent/futures/thread.py:78 _worker                 |
+-----------------+------------------------+-------+--------+-------------------------------------------------------------------------------------------------------+

When a thread id is set, the Python stack of the given thread gets printed.

>>> %threads 139741561206592

STACK: MainThread id=139741561206592
  File "/home/fsc/devel/lona/test_project/env/bin/lona", line 7, in <module>
    exec(compile(f.read(), __file__, 'exec'))
  File "/home/fsc/devel/lona/bin/lona", line 8, in <module>
    handle_command_line(sys.argv)
  File "/home/fsc/devel/lona/lona/command_line/handle_command_line.py", line 232, in handle_command_line
    run_server(args)
  File "/home/fsc/devel/lona/lona/command_line/run_server.py", line 106, in run_server
    _run_app()
  File "/home/fsc/devel/lona/lona/command_line/run_server.py", line 76, in _run_app
    shutdown_timeout=args.shutdown_timeout,
  File "/home/fsc/devel/lona/test_project/env/lib/python3.7/site-packages/aiohttp/web.py", line 508, in run_app
    loop.run_until_complete(main_task)
  File "/home/fsc/.pyenv/versions/3.7.9/lib/python3.7/asyncio/base_events.py", line 574, in run_until_complete
    self.run_forever()
  File "/home/fsc/.pyenv/versions/3.7.9/lib/python3.7/asyncio/base_events.py", line 541, in run_forever
    self._run_once()
  File "/home/fsc/.pyenv/versions/3.7.9/lib/python3.7/asyncio/base_events.py", line 1750, in _run_once
    event_list = self._selector.select(timeout)
  File "/home/fsc/.pyenv/versions/3.7.9/lib/python3.7/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
END STACK