meerschaum 2.7.0__py3-none-any.whl → 2.7.1__py3-none-any.whl

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.
@@ -60,6 +60,7 @@ dash_app = enrich.DashProxy(
60
60
  dash_app.layout = html.Div([
61
61
  location,
62
62
  dcc.Store(id='session-store', storage_type='local', data={}),
63
+ dcc.Store(id='instance-store', storage_type='session', data={}),
63
64
  html.Div([], id='page-layout-div'),
64
65
  ])
65
66
 
@@ -11,6 +11,8 @@ from __future__ import annotations
11
11
  import textwrap
12
12
  import json
13
13
  import uuid
14
+ from datetime import datetime, timezone
15
+
14
16
  from dash.dependencies import Input, Output, State, ALL, MATCH
15
17
  from dash.exceptions import PreventUpdate
16
18
  from meerschaum.utils.typing import List, Optional, Any, Tuple
@@ -191,6 +193,7 @@ def update_page_layout_div(
191
193
  Input('get-plugins-button', 'n_clicks'),
192
194
  Input('get-users-button', 'n_clicks'),
193
195
  Input('get-graphs-button', 'n_clicks'),
196
+ Input('instance-select', 'value'),
194
197
  State('mrsm-location', 'href'),
195
198
  State('session-store', 'data'),
196
199
  State('webterm-div', 'children'),
@@ -210,7 +213,7 @@ def update_content(*args):
210
213
  ### Open the webterm on the initial load.
211
214
  if not ctx.triggered:
212
215
  initial_load = True
213
- trigger = 'open-shell-button'
216
+ trigger = 'instance-select'
214
217
 
215
218
  trigger = ctx.triggered[0]['prop_id'].split('.')[0] if not trigger else trigger
216
219
 
@@ -232,7 +235,7 @@ def update_content(*args):
232
235
  'get-plugins-button': get_plugins_cards,
233
236
  'get-users-button': get_users_cards,
234
237
  'get-graphs-button': get_graphs_cards,
235
- 'open-shell-button': lambda x: ([], []),
238
+ 'instance-select': lambda x: ([], []),
236
239
  }
237
240
  ### Defaults to 3 if not in dict.
238
241
  trigger_num_cols = {
@@ -248,7 +251,7 @@ def update_content(*args):
248
251
  webterm_style = {
249
252
  'display': (
250
253
  'none'
251
- if trigger not in ('open-shell-button', 'cancel-button', 'go-button')
254
+ if trigger not in ('instance-select', 'cancel-button', 'go-button')
252
255
  else 'block'
253
256
  )
254
257
  }
@@ -284,9 +287,9 @@ dash_app.clientside_callback(
284
287
  input_flags_texts,
285
288
  instance,
286
289
  ){
287
- if (!n_clicks){ return url; }
290
+ if (!n_clicks){ return dash_clientside.no_update; }
288
291
  iframe = document.getElementById('webterm-iframe');
289
- if (!iframe){ return url; }
292
+ if (!iframe){ return dash_clientside.no_update; }
290
293
 
291
294
  // Actions must be obtained from the DOM because of dynamic subactions.
292
295
  action = document.getElementById('action-dropdown').value;
@@ -308,7 +311,7 @@ dash_app.clientside_callback(
308
311
  },
309
312
  url
310
313
  );
311
- return url;
314
+ return dash_clientside.no_update;
312
315
  }
313
316
  """,
314
317
  Output('mrsm-location', 'href'),
@@ -472,29 +475,30 @@ def update_flags(input_flags_dropdown_values, n_clicks, input_flags_texts):
472
475
 
473
476
 
474
477
  @dash_app.callback(
475
- Output(component_id='connector-keys-dropdown', component_property='options'),
476
- Output(component_id='connector-keys-list', component_property='children'),
477
- Output(component_id='connector-keys-dropdown', component_property='value'),
478
- Output(component_id='metric-keys-dropdown', component_property='options'),
479
- Output(component_id='metric-keys-list', component_property='children'),
480
- Output(component_id='metric-keys-dropdown', component_property='value'),
481
- Output(component_id='location-keys-dropdown', component_property='options'),
482
- Output(component_id='location-keys-list', component_property='children'),
483
- Output(component_id='location-keys-dropdown', component_property='value'),
484
- Output(component_id='instance-select', component_property='value'),
485
- Output(component_id='instance-alert-div', component_property='children'),
486
- Input(component_id='connector-keys-dropdown', component_property='value'),
487
- Input(component_id='metric-keys-dropdown', component_property='value'),
488
- Input(component_id='location-keys-dropdown', component_property='value'),
489
- Input(component_id='instance-select', component_property='value'),
490
- *keys_state
478
+ Output('connector-keys-dropdown', 'options'),
479
+ Output('connector-keys-list', 'children'),
480
+ Output('connector-keys-dropdown', 'value'),
481
+ Output('metric-keys-dropdown', 'options'),
482
+ Output('metric-keys-list', 'children'),
483
+ Output('metric-keys-dropdown', 'value'),
484
+ Output('location-keys-dropdown', 'options'),
485
+ Output('location-keys-list', 'children'),
486
+ Output('location-keys-dropdown', 'value'),
487
+ Output('instance-select', 'value'),
488
+ Output('instance-alert-div', 'children'),
489
+ Output('instance-store', 'data'),
490
+ Input('connector-keys-dropdown', 'value'),
491
+ Input('metric-keys-dropdown', 'value'),
492
+ Input('location-keys-dropdown', 'value'),
493
+ Input('instance-select', 'value'),
494
+ State('instance-store', 'data'),
491
495
  )
492
496
  def update_keys_options(
493
497
  connector_keys: Optional[List[str]],
494
498
  metric_keys: Optional[List[str]],
495
499
  location_keys: Optional[List[str]],
496
500
  instance_keys: Optional[str],
497
- *keys
501
+ instance_store_data: Optional[Dict[str, Any]],
498
502
  ):
499
503
  """
500
504
  Update the keys dropdown menus' options.
@@ -503,11 +507,24 @@ def update_keys_options(
503
507
  trigger = ctx.triggered[0]['prop_id'].split('.')[0]
504
508
  instance_click = trigger == 'instance-select'
505
509
 
510
+ session_instance = instance_store_data.get('session_instance', None)
511
+
506
512
  ### Update the instance first.
507
513
  update_instance_keys = False
508
514
  if not instance_keys:
515
+ ### NOTE: Set to `session_instance` to restore the last used session.
516
+ ### Choosing not to do this in order to keep the dashboard and webterm in sync.
509
517
  instance_keys = str(get_api_connector())
510
518
  update_instance_keys = True
519
+
520
+ instance_store_data_to_return = (
521
+ {**(instance_store_data or {}), **{'session_instance': instance_keys}}
522
+ if update_instance_keys or session_instance != instance_keys
523
+ else dash.no_update
524
+ )
525
+ if not trigger and not update_instance_keys:
526
+ raise PreventUpdate
527
+
511
528
  instance_alerts = []
512
529
  try:
513
530
  parse_instance_keys(instance_keys)
@@ -609,6 +626,7 @@ def update_keys_options(
609
626
  location_keys,
610
627
  (instance_keys if update_instance_keys else dash.no_update),
611
628
  instance_alerts,
629
+ instance_store_data_to_return,
612
630
  )
613
631
 
614
632
  dash_app.clientside_callback(
@@ -617,14 +635,13 @@ dash_app.clientside_callback(
617
635
  instance,
618
636
  url,
619
637
  ){
620
- window.instance = instance;
621
- if (!instance){ return url; }
622
- iframe = document.getElementById('webterm-iframe');
623
- if (!iframe){ return url; }
624
638
  if (!window.instance){
625
639
  window.instance = instance;
626
640
  return url;
627
641
  }
642
+ if (!instance){ return url; }
643
+ iframe = document.getElementById('webterm-iframe');
644
+ if (!iframe){ return url; }
628
645
  window.instance = instance;
629
646
 
630
647
  iframe.contentWindow.postMessage(
@@ -639,6 +656,7 @@ dash_app.clientside_callback(
639
656
  """,
640
657
  Output('mrsm-location', 'href'),
641
658
  Input('instance-select', 'value'),
659
+ State('mrsm-location', 'href'),
642
660
  )
643
661
 
644
662
 
@@ -698,7 +716,7 @@ dash_app.clientside_callback(
698
716
  """
699
717
  function(console_children, url){
700
718
  if (!console_children){
701
- return console_children;
719
+ return dash_clientside.no_update;
702
720
  }
703
721
  var ansi_up = new AnsiUp;
704
722
  var html = ansi_up.ansi_to_html(console_children);
@@ -707,7 +725,7 @@ dash_app.clientside_callback(
707
725
  "<pre id=\\"console-pre\\">" + html + "</pre>"
708
726
  );
709
727
  console_div.scrollTop = console_div.scrollHeight;
710
- return url;
728
+ return dash_clientside.no_update;;
711
729
  }
712
730
  """,
713
731
  Output('mrsm-location', 'href'),
@@ -885,8 +903,8 @@ dash_app.clientside_callback(
885
903
 
886
904
  iframe = document.getElementById('webterm-iframe');
887
905
  if (!iframe){ return dash_clientside.no_update; }
888
- var location = pipe_meta.location;
889
- if (!pipe_meta.location){
906
+ var location = pipe_meta.location_key;
907
+ if (!pipe_meta.location_key){
890
908
  location = "None";
891
909
  }
892
910
 
@@ -894,25 +912,25 @@ dash_app.clientside_callback(
894
912
  if (action == "python"){
895
913
  subaction = (
896
914
  '"' + "pipe = mrsm.Pipe('"
897
- + pipe_meta.connector
915
+ + pipe_meta.connector_keys
898
916
  + "', '"
899
- + pipe_meta.metric
917
+ + pipe_meta.metric_key
900
918
  + "'"
901
919
  );
902
920
  if (location != "None"){
903
921
  subaction += ", '" + location + "'";
904
922
  }
905
- subaction += ", instance='" + pipe_meta.instance + "')" + '"';
923
+ subaction += ", instance='" + pipe_meta.instance_keys + "')" + '"';
906
924
  }
907
925
 
908
926
  iframe.contentWindow.postMessage(
909
927
  {
910
928
  action: action,
911
929
  subaction: subaction,
912
- connector_keys: [pipe_meta.connector],
913
- metric_keys: [pipe_meta.metric],
914
- location_keys: [location],
915
- instance: pipe_meta.instance,
930
+ connector_keys: [pipe_meta.connector_keys],
931
+ metric_keys: [pipe_meta.metric_key],
932
+ location_keys: [pipe_meta.location_key],
933
+ instance: pipe_meta.instance_keys,
916
934
  },
917
935
  url
918
936
  );
@@ -17,9 +17,9 @@ window.addEventListener(
17
17
  (event) => {
18
18
  if (!event.isTrusted){ return; }
19
19
 
20
- action_str = event.data.action;
21
- subaction_str = event.data['subaction'] ? event.data['subaction'] : '';
22
- subaction_text = event.data['subaction_text'] ? event.data['subaction_text'] : '';
20
+ let action_str = event.data.action;
21
+ let subaction_str = event.data['subaction'] ? event.data['subaction'] : '';
22
+ let subaction_text = event.data['subaction_text'] ? event.data['subaction_text'] : '';
23
23
  if (subaction_str.length > 0){
24
24
  action_str += ' ' + subaction_str;
25
25
  }
@@ -27,45 +27,53 @@ window.addEventListener(
27
27
  action_str += ' ' + subaction_text;
28
28
  }
29
29
 
30
- connector_keys = event.data['connector_keys'] ? event.data['connector_keys'] : [];
31
- metric_keys = event.data['metric_keys'] ? event.data['metric_keys'] : [];
32
- location_keys = event.data['location_keys'] ? event.data['location_keys'] : [];
33
- connector_keys_str = " -c";
34
- for (ck of connector_keys){
35
- quote_str = ck.includes(" ") ? "'" : "";
36
- connector_keys_str += " " + quote_str + ck + quote_str;
30
+ let connector_keys = event.data['connector_keys'] ? event.data['connector_keys'] : [];
31
+ let metric_keys = event.data['metric_keys'] ? event.data['metric_keys'] : [];
32
+ let location_keys = event.data['location_keys'] ? event.data['location_keys'] : [];
33
+ let connector_keys_str = " -c";
34
+ for (let ck of connector_keys){
35
+ if (typeof ck === "string"){
36
+ let quote_str = ck.includes(" ") ? "'" : "";
37
+ connector_keys_str += " " + quote_str + ck + quote_str;
38
+ }
37
39
  }
38
40
  if (connector_keys.length === 0){
39
41
  connector_keys_str = "";
40
42
  }
41
- metric_keys_str = " -m";
43
+ let metric_keys_str = " -m";
42
44
  for (mk of metric_keys){
43
- quote_str = mk.includes(" ") ? "'" : "";
44
- metric_keys_str += " " + quote_str + mk + quote_str;
45
+ if (typeof mk === "string"){
46
+ let quote_str = mk.includes(" ") ? "'" : "";
47
+ metric_keys_str += " " + quote_str + mk + quote_str;
48
+ }
45
49
  }
46
50
  if (metric_keys.length === 0){
47
51
  metric_keys_str = "";
48
52
  }
49
- location_keys_str = " -l";
53
+ let location_keys_str = " -l";
50
54
  for (lk of location_keys){
51
- quote_str = lk.includes(" ") ? "'" : "";
52
- location_keys_str += " " + quote_str + lk + quote_str;
55
+ if (typeof lk === "string"){
56
+ quote_str = lk.includes(" ") ? "'" : "";
57
+ location_keys_str += " " + quote_str + lk + quote_str;
58
+ }
53
59
  }
54
60
  if (location_keys.length === 0){
55
61
  location_keys_str = "";
56
62
  }
57
63
 
58
- instance = event.data['instance'] ? event.data['instance'] : '';
59
- flags_str = "";
64
+ let instance = event.data['instance'] ? event.data['instance'] : '';
65
+ let flags_str = "";
60
66
  if (instance.length > 0){
61
67
  flags_str += " -i " + instance;
62
68
  }
63
- flags = event.data['flags'] ? event.data['flags'] : [];
69
+ let flags = event.data['flags'] ? event.data['flags'] : [];
64
70
  for (fl of flags){
65
- flags_str += " " + fl;
71
+ if (typeof fl === "string"){
72
+ flags_str += " " + fl;
73
+ }
66
74
  }
67
75
  // NOTE: Input flags are not quoted to allow for multiple arguments.
68
- input_flags = event.data['input_flags'] ? event.data['input_flags'] : [];
76
+ let input_flags = event.data['input_flags'] ? event.data['input_flags'] : [];
69
77
  for (const [index, fl] of input_flags.entries()){
70
78
  if (!fl){ continue; }
71
79
  fl_val = event.data['input_flags_texts'][index];
@@ -13,9 +13,10 @@ from meerschaum.utils.packages import attempt_import
13
13
  from meerschaum.api.dash.sessions import is_session_authenticated
14
14
  fastapi, fastapi_responses = attempt_import('fastapi', 'fastapi.responses')
15
15
  import starlette
16
- httpcore = attempt_import('httpcore')
17
- httpx = attempt_import('httpx')
18
- websockets = attempt_import('websockets')
16
+
17
+ httpcore = attempt_import('httpcore', lazy=False)
18
+ httpx = attempt_import('httpx', lazy=False)
19
+ websockets = attempt_import('websockets', lazy=False)
19
20
  Request = fastapi.Request
20
21
  WebSocket = fastapi.WebSocket
21
22
  HTMLResponse = fastapi_responses.HTMLResponse
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.7.0"
5
+ __version__ = "2.7.1"
@@ -190,7 +190,12 @@ def create_engine(
190
190
  import copy
191
191
  ### Install and patch required drivers.
192
192
  if self.flavor in install_flavor_drivers:
193
- attempt_import(*install_flavor_drivers[self.flavor], debug=debug, lazy=False, warn=False)
193
+ _ = attempt_import(
194
+ *install_flavor_drivers[self.flavor],
195
+ debug=debug,
196
+ lazy=False,
197
+ warn=False,
198
+ )
194
199
  if self.flavor == 'mssql':
195
200
  pyodbc = attempt_import('pyodbc', debug=debug, lazy=False, warn=False)
196
201
  pyodbc.pooling = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.7.0
3
+ Version: 2.7.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -56,7 +56,7 @@ meerschaum/api/_chain.py,sha256=h8-WXUGXX6AqzdALfsBC5uv0FkAcLdHJXCGzqzuq89k,875
56
56
  meerschaum/api/_events.py,sha256=f-98AXHU10IL9zRGX1FrZFANxxiMz5ryeJnfFWaU8R8,2232
57
57
  meerschaum/api/_oauth2.py,sha256=dJTIVlPpX3sAVW-PcN6pXRNy2RR5QAalu2RHp3l14YU,1683
58
58
  meerschaum/api/_websockets.py,sha256=EMT9wB3yELu_WyCMqn9ZpgMDh23spUUchouRLCCLVuw,1509
59
- meerschaum/api/dash/__init__.py,sha256=29vMm_m5gSDYG0lahh-8yVfhqg9kUFnUrYyw_9jC2Y0,2078
59
+ meerschaum/api/dash/__init__.py,sha256=jL08XtzNAzsrXJthDRqq-DlJjg6OpoyqeLeNjkp_bnA,2147
60
60
  meerschaum/api/dash/components.py,sha256=t2goHW7oioao5Ew6Dro9U4LZDnHF-YWb4flLPx46GP8,6293
61
61
  meerschaum/api/dash/connectors.py,sha256=nJxBOFldtCMJLYjUSVYZwX5BO-LNjTNHgoEaXe-0XMo,843
62
62
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
@@ -77,7 +77,7 @@ meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3
77
77
  meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
78
78
  meerschaum/api/dash/callbacks/__init__.py,sha256=5nLDkziaWWWt5ivmuMNG3kVBMOfqB6KQNIAS8f16bmA,493
79
79
  meerschaum/api/dash/callbacks/custom.py,sha256=N9pVolAF8sIuJD3V6xBSgS7k8THJo_f8d1qAoh1Kg60,1161
80
- meerschaum/api/dash/callbacks/dashboard.py,sha256=CWIHQAIBm5zORQXevpaeoA-AvHi0XJLkyj2tNMdI3EY,32745
80
+ meerschaum/api/dash/callbacks/dashboard.py,sha256=-qTzDG7Gnc597A-I5KBaPu6myXhW9ow0fm5gxErtUMM,33171
81
81
  meerschaum/api/dash/callbacks/jobs.py,sha256=JYTrDcUEte_MIT3EegLDmQDsmU_Mxqw8L60dvF71ho4,8418
82
82
  meerschaum/api/dash/callbacks/login.py,sha256=mEvMgV-f85H6DvqNdTvJPoiwHqTnhWY2nf_zLB26ipE,2876
83
83
  meerschaum/api/dash/callbacks/pipes.py,sha256=byphQn-wJOe8ft-fGU9wac0n5xsMjVHJzNvYYb9NsKU,1693
@@ -116,7 +116,7 @@ meerschaum/api/resources/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
116
116
  meerschaum/api/resources/templates/index.html,sha256=Ck-S0U5abJgB-wTOKIGg0ispGzKlXXqvFUoNAAByzLA,1019
117
117
  meerschaum/api/resources/templates/old_index.html,sha256=BDeOlcXhSsBH3-NaRtuX4Z1sDuhOoCMa_Dq-6g5RMpc,1711
118
118
  meerschaum/api/resources/templates/secret.html,sha256=0QWkm4ZoN81Aw1pd2-62rGCvx3nXPHfFUoegj3Iy8Ls,141
119
- meerschaum/api/resources/templates/termpage.html,sha256=qspXRuOkzqOn2mXw9mmUldzsvOHq_LyaywQ29CUevp0,4527
119
+ meerschaum/api/resources/templates/termpage.html,sha256=4npmhCrZtPqxDE9hK7tzKjbLUZyUzu-X73vKg3_C6lc,4807
120
120
  meerschaum/api/routes/__init__.py,sha256=jbkeFNl51Tg8aT5gWe560ZLZLojFJsLMe5IENRjRkb0,606
121
121
  meerschaum/api/routes/_actions.py,sha256=VUasS1dpr4d3TXHcR1CXlRZPAqvGKKuHv_f9PsOkQ5c,1732
122
122
  meerschaum/api/routes/_connectors.py,sha256=NNbcn5xWhKqw2PqueSEaqRaZ95hFGDKazG5lE7gsssc,1849
@@ -128,7 +128,7 @@ meerschaum/api/routes/_pipes.py,sha256=Ix4N46qZ2YIEv7bd8SA9fy1k67n8zFlmPznSeK8mi
128
128
  meerschaum/api/routes/_plugins.py,sha256=vR6-uTJraY1YEJMuRvds1-xFLB2mexxnp2dJwN_0rVo,6216
129
129
  meerschaum/api/routes/_users.py,sha256=SfAkZFKrKnGjpzj8SFIKzPemzQJOH3oB72h19EaUvcQ,7204
130
130
  meerschaum/api/routes/_version.py,sha256=2t-nw_9IxCVZCNEar0LOwmut2zsClRVHjiOOUx16cu0,825
131
- meerschaum/api/routes/_webterm.py,sha256=gow_xCsojGI37ZZDVfv2gdM18r_H2b2MR0ovFuG0uJ8,3872
131
+ meerschaum/api/routes/_webterm.py,sha256=MenDvWXnZ8CWEmryB46pKohMf0PN6o1xJGZ3LFjxTOc,3909
132
132
  meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
133
133
  meerschaum/config/__init__.py,sha256=5ZBq71P9t3nb74r5CGvMfNuauPscfegBX-nkaAUi5C4,11541
134
134
  meerschaum/config/_dash.py,sha256=BJHl4xMrQB-YHUEU7ldEW8q_nOPoIRSOqLrfGElc6Dw,187
@@ -143,7 +143,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
143
143
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
144
144
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
145
145
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
146
- meerschaum/config/_version.py,sha256=CFxscxn1WACWK8oZJVGnMF0MCBbufjW-Wo5hmfzfRMo,71
146
+ meerschaum/config/_version.py,sha256=KZzrNL20ForXO9e1OCdiNBZ0WcwZ4I9Z_8Rz0oMe8d8,71
147
147
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
148
148
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
149
  meerschaum/config/stack/__init__.py,sha256=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -173,7 +173,7 @@ meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPH
173
173
  meerschaum/connectors/sql/_SQLConnector.py,sha256=g9SFK30CZp7CTJI-SdpOanL1NQUBFQeUng7FSGacJA4,11985
174
174
  meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
175
175
  meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9hUXA,4405
176
- meerschaum/connectors/sql/_create_engine.py,sha256=uFpDeTu9v1Duw6EZ8opeOIU5Z9aPgWAbaequV7vbLW0,10449
176
+ meerschaum/connectors/sql/_create_engine.py,sha256=MqgFhtWUMSgkx6Qu6Q6Ny3jIz-GWix_Eawko59RLm1o,10512
177
177
  meerschaum/connectors/sql/_fetch.py,sha256=UIBAvMxassP-ofNxk_FoG-ukHzEac4jyu4lA0SXHcBg,13140
178
178
  meerschaum/connectors/sql/_instance.py,sha256=_FHcAia3vhnWlQuB46YELGgsM9OYIJSHxL3FWNU0GWg,6287
179
179
  meerschaum/connectors/sql/_pipes.py,sha256=QSlEBmkXoLRevpEmocMce45sI8Qhe1n7RWShVx5W1pg,118932
@@ -251,11 +251,11 @@ meerschaum/utils/packages/_packages.py,sha256=ykannoLv2Fm4iwZwiIlNAGZvt654cMJhjX
251
251
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
252
252
  meerschaum/utils/venv/_Venv.py,sha256=QsnDGEE_YBqXIq53NTWi2TANA1FbkqJBl_xQi9jQP_U,3537
253
253
  meerschaum/utils/venv/__init__.py,sha256=eup-zUBdHBdNbu_G1qgA8iRzJvlAXyGhY7pG-SEvbHs,25347
254
- meerschaum-2.7.0.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
- meerschaum-2.7.0.dist-info/METADATA,sha256=8n_3quGPrZgML31CjNvJu8qdMAKiKxoFY0sgF4A1a0I,24224
256
- meerschaum-2.7.0.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
- meerschaum-2.7.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
258
- meerschaum-2.7.0.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
- meerschaum-2.7.0.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
- meerschaum-2.7.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
- meerschaum-2.7.0.dist-info/RECORD,,
254
+ meerschaum-2.7.1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
+ meerschaum-2.7.1.dist-info/METADATA,sha256=rIEPTlucCyhBXjRB_ohMKVry1H7qOveF7ojFnrr1TcM,24224
256
+ meerschaum-2.7.1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
+ meerschaum-2.7.1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
258
+ meerschaum-2.7.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
+ meerschaum-2.7.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
+ meerschaum-2.7.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
+ meerschaum-2.7.1.dist-info/RECORD,,