dialoghelper 0.0.4__tar.gz → 0.0.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dialoghelper
3
- Version: 0.0.4
3
+ Version: 0.0.6
4
4
  Summary: Helper functions for solveit dialogs
5
5
  Home-page: https://github.com/AnswerDotAI/dialoghelper
6
6
  Author: Jeremy Howard
@@ -0,0 +1,2 @@
1
+ __version__ = "0.0.6"
2
+ from .core import *
@@ -2,10 +2,11 @@
2
2
 
3
3
  # %% auto 0
4
4
  __all__ = ['get_db', 'find_var', 'find_dialog_id', 'find_msgs', 'find_msg_id', 'read_msg_ids', 'msg_idx', 'read_msg', 'add_msg',
5
- 'update_msg', 'add_html', 'load_gist', 'gist_file', 'import_string', 'import_gist']
5
+ 'update_msg', 'add_html', 'load_gist', 'gist_file', 'import_string', 'import_gist', 'asdict']
6
6
 
7
7
  # %% ../nbs/00_core.ipynb
8
8
  import inspect, json, importlib, linecache
9
+ from typing import Dict
9
10
  from tempfile import TemporaryDirectory
10
11
  from ipykernel_helper import *
11
12
 
@@ -13,6 +14,10 @@ from fastcore.utils import *
13
14
  from fastcore.meta import delegates
14
15
  from ghapi.all import *
15
16
  from fastlite import *
17
+ from fastcore.xtras import asdict
18
+
19
+ # %% ../nbs/00_core.ipynb
20
+ _all_ = ["asdict"]
16
21
 
17
22
  # %% ../nbs/00_core.ipynb
18
23
  def get_db(ns:dict=None):
@@ -45,10 +50,11 @@ def find_msgs(
45
50
  pattern: str, # Text to search for
46
51
  limit:int=10 # Limit number of returned items
47
52
  ):
48
- "Find messages in a specific dialog that contain the given pattern."
53
+ "Find messages in a specific dialog that contain the given pattern. To refer to a message found later, use its `sid` field."
49
54
  did = find_dialog_id()
50
55
  db = get_db()
51
- return db.t.message('did=? AND content LIKE ?', [did, f'%{pattern}%'], limit=limit)
56
+ res = db.t.message('did=? AND content LIKE ? ORDER BY mid', [did, f'%{pattern}%'], limit=limit)
57
+ return [asdict(o) for o in res]
52
58
 
53
59
  # %% ../nbs/00_core.ipynb
54
60
  def find_msg_id():
@@ -60,7 +66,7 @@ def read_msg_ids():
60
66
  "Get all ids in current dialog."
61
67
  did = find_dialog_id()
62
68
  db = get_db()
63
- return [o.sid for o in db.t.message('did=?', [did], select='sid', order_by='id')]
69
+ return [o.sid for o in db.t.message('did=?', [did], select='sid', order_by='mid')]
64
70
 
65
71
  # %% ../nbs/00_core.ipynb
66
72
  def msg_idx():
@@ -98,25 +104,35 @@ def _msg(
98
104
  # %% ../nbs/00_core.ipynb
99
105
  @delegates(_msg)
100
106
  def add_msg(
101
- content:str, # message that we are updating or adding before/after
107
+ content:str, # content of the message (i.e the message prompt, code, or note text)
102
108
  msg_type: str='note', # message type, can be 'code', 'note', or 'prompt'
103
109
  output:str='', # for prompts/code, initial output
104
110
  placement:str='add_after', # can be 'add_after', 'add_before', 'update', 'at_start', 'at_end'
105
- msg_id:str=None, # id of message that placement is relative to (if None, uses current message)
111
+ sid:str=None, # sid of message that placement is relative to (if None, uses current message)
106
112
  **kwargs # additional Message fields such as skipped i/o_collapsed, etc, passed through to the server
107
113
  ):
108
- "Add/update a message to the queue to show after code execution completes."
114
+ "Add/update a message to the queue to show after code execution completes. Be sure to pass a `sid` (stable id) not a `mid` (which is used only for sorting, and can change)."
109
115
  assert msg_type in ('note', 'code', 'prompt'), "msg_type must be 'code', 'note', or 'prompt'."
110
- run_cmd('add_msg', content=content, msg_type=msg_type, output=output, placement=placement, msg_id=msg_id, **kwargs)
111
-
112
- # %% ../nbs/00_core.ipynb
113
- def update_msg(msg: dict):
114
- "Update an existing message in the dialog."
115
- if not isinstance(msg, dict): msg = asdict(msg)
116
- exclude = {'id', 'content', 'msg_type', 'output'} # explicit args
117
- kw = {k: v for k, v in msg.items() if k not in exclude}
118
- add_msg(content=msg['content'], msg_type=msg['msg_type'], output=msg['output'],
119
- placement='update', msg_id=msg['id'], **kw)
116
+ assert msg_type not in ('note') or not output, "'note' messages cannot have an output."
117
+ run_cmd('add_msg', content=content, msg_type=msg_type, output=output, placement=placement, sid=sid, **kwargs)
118
+
119
+ # %% ../nbs/00_core.ipynb
120
+ @delegates(add_msg)
121
+ def update_msg(
122
+ msg:Optional[Dict]=None, # Dictionary of field keys/values to update
123
+ sid:str=None, # sid of message that placement is relative to (if None, uses current message)
124
+ content:str=None, # content of the message (i.e the message prompt, code, or note text)
125
+ **kwargs):
126
+ "Update an existing message. Provide either `msg` OR field key/values to update. Use `content` param to update contents. Be sure to pass a `sid` (stable id) not a `mid` (which is used only for sorting, and can change)."
127
+ if content: kwargs['content']=content
128
+ assert bool(msg)^bool(kwargs), "Provide *either* msg, for kwargs, not both"
129
+ if msg and 'sid' in msg: target_id = msg['sid']
130
+ elif sid: target_id = sid
131
+ else: raise TypeError("update_msg needs either a dict message or `sid=...`")
132
+ old = asdict(get_db().t.message[target_id])
133
+ kw = old | (msg or {}) | kwargs
134
+ kw.pop('did', None)
135
+ return add_msg(placement='update', **kw)
120
136
 
121
137
  # %% ../nbs/00_core.ipynb
122
138
  def add_html(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dialoghelper
3
- Version: 0.0.4
3
+ Version: 0.0.6
4
4
  Summary: Helper functions for solveit dialogs
5
5
  Home-page: https://github.com/AnswerDotAI/dialoghelper
6
6
  Author: Jeremy Howard
@@ -1,7 +1,7 @@
1
1
  [DEFAULT]
2
2
  repo = dialoghelper
3
3
  lib_name = dialoghelper
4
- version = 0.0.4
4
+ version = 0.0.6
5
5
  min_python = 3.9
6
6
  license = apache2
7
7
  black_formatting = False
@@ -1,2 +0,0 @@
1
- __version__ = "0.0.4"
2
- from .core import *
File without changes
File without changes
File without changes
File without changes
File without changes