meerschaum 2.2.0rc3__py3-none-any.whl → 2.2.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.
@@ -47,9 +47,9 @@ def entry(sysargs: Optional[List[str]] = None) -> SuccessTuple:
47
47
  )
48
48
  )
49
49
 
50
- if args.get('schedule', None):
51
- from meerschaum.utils.schedule import schedule_function
52
- return schedule_function(entry_with_args, **args)
50
+ # if args.get('schedule', None):
51
+ # from meerschaum.utils.schedule import schedule_function
52
+ # return schedule_function(entry_with_args, **args)
53
53
  return entry_with_args(**args)
54
54
 
55
55
 
@@ -61,7 +61,7 @@ def entry_with_args(
61
61
  Use `_entry()` for parsing sysargs before executing.
62
62
  """
63
63
  import sys
64
- from meerschaum.plugins import Plugin
64
+ import functools
65
65
  from meerschaum.actions import get_action, get_main_action_name
66
66
  from meerschaum._internal.arguments import remove_leading_action
67
67
  from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
@@ -88,10 +88,41 @@ def entry_with_args(
88
88
  action_function.__module__.startswith('plugins.')
89
89
  ) else None
90
90
  )
91
- plugin = Plugin(plugin_name) if plugin_name else None
91
+
92
+ skip_schedule = False
93
+ if (
94
+ kw['action']
95
+ and kw['action'][0] == 'start'
96
+ and kw['action'][1] in ('job', 'jobs')
97
+ ):
98
+ skip_schedule = True
92
99
 
93
100
  kw['action'] = remove_leading_action(kw['action'], _actions=_actions)
94
101
 
102
+ do_action = functools.partial(_do_action_wrapper, action_function, plugin_name, **kw)
103
+ if kw.get('schedule', None) and not skip_schedule:
104
+ from meerschaum.utils.schedule import schedule_function
105
+ from meerschaum.utils.misc import interval_str
106
+ import time
107
+ from datetime import timedelta
108
+ start_time = time.perf_counter()
109
+ schedule_function(do_action, **kw)
110
+ delta = timedelta(seconds=(time.perf_counter() - start_time))
111
+ result = True, f"Exited scheduler after {interval_str(delta)}."
112
+ else:
113
+ result = do_action()
114
+
115
+ ### Clean up stray virtual environments.
116
+ for venv in [venv for venv in active_venvs]:
117
+ deactivate_venv(venv, debug=kw.get('debug', False), force=True)
118
+
119
+ return result
120
+
121
+
122
+ def _do_action_wrapper(action_function, plugin_name, **kw):
123
+ from meerschaum.plugins import Plugin
124
+ from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
125
+ plugin = Plugin(plugin_name) if plugin_name else None
95
126
  with Venv(plugin, debug=kw.get('debug', False)):
96
127
  action_name = ' '.join(action_function.__name__.split('_') + kw.get('action', []))
97
128
  try:
@@ -111,14 +142,8 @@ def entry_with_args(
111
142
  )
112
143
  except KeyboardInterrupt:
113
144
  result = False, f"Cancelled action `{action_name}`."
114
-
115
- ### Clean up stray virtual environments.
116
- for venv in [venv for venv in active_venvs]:
117
- deactivate_venv(venv, debug=kw.get('debug', False), force=True)
118
-
119
145
  return result
120
146
 
121
-
122
147
  _shells = []
123
148
  _shell = None
124
149
  def get_shell(
@@ -589,8 +589,8 @@ def _show_logs(
589
589
  if not ANSI:
590
590
  info = print
591
591
  colors = get_config('jobs', 'logs', 'colors')
592
- timestamp_format = get_config('jobs', 'logs', 'timestamp_format')
593
- follow_timestamp_format = get_config('jobs', 'logs', 'follow_timestamp_format')
592
+ timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format')
593
+ follow_timestamp_format = get_config('jobs', 'logs', 'timestamps', 'follow_format')
594
594
  daemons = get_filtered_daemons(action)
595
595
  now = datetime.now(timezone.utc)
596
596
  now_str = now.strftime(timestamp_format)
@@ -46,14 +46,19 @@ endpoints = STATIC_CONFIG['api']['endpoints']
46
46
  lazy = False,
47
47
  check_update = CHECK_UPDATE,
48
48
  )
49
- typing_extensions = attempt_import(
50
- 'typing_extensions', lazy=False, check_update=CHECK_UPDATE,
49
+ (
50
+ typing_extensions,
51
+ uvicorn_workers,
52
+ ) = attempt_import(
53
+ 'typing_extensions',
54
+ 'uvicorn.workers',
55
+ lazy = False,
56
+ check_update = CHECK_UPDATE,
51
57
  venv = None,
52
58
  )
53
59
  from meerschaum.api._chain import check_allow_chaining, DISALLOW_CHAINING_MESSAGE
54
60
  uvicorn_config_path = API_UVICORN_RESOURCES_PATH / SERVER_ID / 'config.json'
55
61
 
56
- uvicorn_workers = attempt_import('uvicorn.workers', venv=None, check_update=CHECK_UPDATE)
57
62
  uvicorn_config = None
58
63
  sys_config = get_config('system', 'api')
59
64
  permissions_config = get_config('system', 'api', 'permissions')
meerschaum/api/_oauth2.py CHANGED
@@ -7,11 +7,11 @@ Define JWT authorization here.
7
7
  """
8
8
 
9
9
  import os
10
- from meerschaum.api import app, endpoints
10
+ from meerschaum.api import app, endpoints, CHECK_UPDATE
11
11
  from meerschaum.utils.packages import attempt_import
12
- fastapi = attempt_import('fastapi', lazy=False)
13
- fastapi_responses = attempt_import('fastapi.responses', lazy=False)
14
- fastapi_login = attempt_import('fastapi_login')
12
+ fastapi = attempt_import('fastapi', lazy=False, check_update=CHECK_UPDATE)
13
+ fastapi_responses = attempt_import('fastapi.responses', lazy=False, check_update=CHECK_UPDATE)
14
+ fastapi_login = attempt_import('fastapi_login', check_update=CHECK_UPDATE)
15
15
 
16
16
  LoginManager = fastapi_login.LoginManager
17
17
  def generate_secret_key() -> str:
@@ -713,11 +713,11 @@ def download_pipe_csv(n_clicks):
713
713
  pipe = pipe_from_ctx(ctx, 'n_clicks')
714
714
  if pipe is None:
715
715
  raise PreventUpdate
716
- filename = str(pipe.target) + '.csv'
717
716
  bounds = pipe.get_chunk_bounds(bounded=True, debug=debug)
718
- begin, _ = bounds[-1]
717
+ begin, end = bounds[-1]
718
+ filename = str(pipe.target) + f" {begin} - {end}.csv"
719
719
  try:
720
- df = pipe.get_data(begin=begin, end=None, debug=debug)
720
+ df = pipe.get_data(begin=begin, end=end, debug=debug)
721
721
  except Exception as e:
722
722
  df = None
723
723
  if df is not None:
@@ -108,7 +108,7 @@ action_dropdown_row = html.Div(
108
108
  id = 'flags-dropdown',
109
109
  multi = True,
110
110
  placeholder = 'Boolean flags',
111
- options = [],
111
+ options = ['--yes'],
112
112
  value = ['--yes'],
113
113
  ),
114
114
  id = 'flags-dropdown-div',
@@ -11,12 +11,22 @@ from meerschaum.config import __doc__ as doc, get_config
11
11
  from meerschaum.utils.misc import get_connector_labels
12
12
  from meerschaum.utils.packages import attempt_import, import_html, import_dcc, import_pandas
13
13
  from meerschaum.api import endpoints, CHECK_UPDATE
14
- dex = attempt_import('dash_extensions', lazy=False, check_update=CHECK_UPDATE)
15
- dbc = attempt_import('dash_bootstrap_components', lazy=False, check_update=CHECK_UPDATE)
14
+ (
15
+ dex,
16
+ px,
17
+ daq,
18
+ dbc,
19
+ ) = attempt_import(
20
+ 'dash_extensions',
21
+ 'plotly.express',
22
+ 'dash_daq',
23
+ 'dash_bootstrap_components',
24
+ lazy = False,
25
+ warn = False,
26
+ check_update = CHECK_UPDATE,
27
+ )
16
28
  html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHECK_UPDATE)
17
29
  pd = import_pandas(check_update=CHECK_UPDATE)
18
- px = attempt_import('plotly.express', warn=False, check_update=CHECK_UPDATE)
19
- daq = attempt_import('dash_daq', warn=False, check_update=CHECK_UPDATE)
20
30
 
21
31
  from meerschaum.api.dash.components import (
22
32
  go_button,
@@ -14,13 +14,16 @@ default_jobs_config = {
14
14
  'columns': 70,
15
15
  },
16
16
  'logs': {
17
+ 'timestamps': {
18
+ 'enabled': True,
19
+ 'format': '%Y-%m-%d %H:%M',
20
+ 'follow_format': '%H:%M',
21
+ },
17
22
  'num_files_to_keep': 5,
18
23
  'max_file_size': 100_000,
19
24
  'lines_to_show': 30,
20
25
  'refresh_files_seconds': 5,
21
26
  'min_buffer_len': 5,
22
- 'timestamp_format': '%Y-%m-%d %H:%M',
23
- 'follow_timestamp_format': '%H:%M',
24
27
  'colors': [
25
28
  'cyan',
26
29
  'magenta',
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.2.0rc3"
5
+ __version__ = "2.2.1"
@@ -23,7 +23,14 @@ from meerschaum.connectors.sql.SQLConnector import SQLConnector
23
23
  from meerschaum.connectors.api.APIConnector import APIConnector
24
24
  from meerschaum.connectors.sql._create_engine import flavor_configs as sql_flavor_configs
25
25
 
26
- __all__ = ("Connector", "SQLConnector", "APIConnector", "get_connector", "is_connected")
26
+ __all__ = (
27
+ "Connector",
28
+ "SQLConnector",
29
+ "APIConnector",
30
+ "get_connector",
31
+ "is_connected",
32
+ "poll",
33
+ )
27
34
 
28
35
  ### store connectors partitioned by
29
36
  ### type, label for reuse
@@ -42,9 +42,13 @@ def cli(
42
42
  env = copy.deepcopy(dict(os.environ))
43
43
  env[f'MRSM_SQL_{self.label.upper()}'] = json.dumps(self.meta)
44
44
  cli_code = (
45
+ "import sys\n"
45
46
  "import meerschaum as mrsm\n"
46
47
  f"conn = mrsm.get_connector('sql:{self.label}')\n"
47
- f"conn._cli_exit()"
48
+ "success, msg = conn._cli_exit()\n"
49
+ "mrsm.pprint((success, msg))\n"
50
+ "if not success:\n"
51
+ " raise Exception(msg)"
48
52
  )
49
53
  try:
50
54
  _ = venv_exec(cli_code, venv=None, debug=debug, capture_output=False)
@@ -91,6 +95,8 @@ def _cli_exit(
91
95
  cli_arg_str = self.DATABASE_URL
92
96
  if self.flavor in ('sqlite', 'duckdb'):
93
97
  cli_arg_str = str(self.database)
98
+ if cli_arg_str.startswith('postgresql+psycopg://'):
99
+ cli_arg_str = cli_arg_str.replace('postgresql+psycopg://', 'postgresql://')
94
100
 
95
101
  ### Define the script to execute to launch the CLI.
96
102
  ### The `mssqlcli` script is manually written to avoid telemetry
@@ -385,6 +385,9 @@ def get_create_index_queries(
385
385
  -------
386
386
  A dictionary of column names mapping to lists of queries.
387
387
  """
388
+ ### NOTE: Due to recent breaking changes in DuckDB, indices don't behave properly.
389
+ if self.flavor == 'duckdb':
390
+ return {}
388
391
  from meerschaum.utils.sql import (
389
392
  sql_item_name,
390
393
  get_distinct_col_count,
@@ -554,6 +557,9 @@ def get_drop_index_queries(
554
557
  -------
555
558
  A dictionary of column names mapping to lists of queries.
556
559
  """
560
+ ### NOTE: Due to breaking changes within DuckDB, indices must be skipped.
561
+ if self.flavor == 'duckdb':
562
+ return {}
557
563
  if not pipe.exists(debug=debug):
558
564
  return {}
559
565
  from meerschaum.utils.sql import sql_item_name, table_exists, hypertable_queries
@@ -763,6 +769,7 @@ def get_pipe_data(
763
769
  if typ == 'numeric' and col in dtypes
764
770
  ]
765
771
  kw['coerce_float'] = kw.get('coerce_float', (len(numeric_columns) == 0))
772
+
766
773
  df = self.read(
767
774
  query,
768
775
  dtype = dtypes,
@@ -684,8 +684,8 @@ class Daemon:
684
684
  self._rotating_log = RotatingFile(
685
685
  self.log_path,
686
686
  redirect_streams = True,
687
- write_timestamps = True,
688
- timestamp_format = get_config('jobs', 'logs', 'timestamp_format'),
687
+ write_timestamps = get_config('jobs', 'logs', 'timestamps', 'enabled'),
688
+ timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format'),
689
689
  )
690
690
  return self._rotating_log
691
691
 
@@ -699,7 +699,8 @@ class Daemon:
699
699
  self.rotating_log.file_path,
700
700
  num_files_to_keep = self.rotating_log.num_files_to_keep,
701
701
  max_file_size = self.rotating_log.max_file_size,
702
- write_timestamps = True,
702
+ write_timestamps = get_config('jobs', 'logs', 'timestamps', 'enabled'),
703
+ timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format'),
703
704
  )
704
705
  return new_rotating_log.read()
705
706
 
@@ -272,7 +272,7 @@ class RotatingFile(io.IOBase):
272
272
  warn(
273
273
  f"Encountered an issue when redirecting streams:\n{traceback.format_exc()}"
274
274
  )
275
- if start_interception:
275
+ if start_interception and self.write_timestamps:
276
276
  self.start_log_fd_interception()
277
277
 
278
278
  create_new_file = (
@@ -363,7 +363,7 @@ class RotatingFile(io.IOBase):
363
363
  suffix_str = "\n" if self.write_timestamps else ""
364
364
  self.refresh_files(
365
365
  potential_new_len = len(prefix_str + data + suffix_str),
366
- start_interception = True,
366
+ start_interception = self.write_timestamps,
367
367
  )
368
368
  try:
369
369
  if prefix_str:
@@ -591,6 +591,9 @@ class RotatingFile(io.IOBase):
591
591
  """
592
592
  Start the file descriptor monitoring threads.
593
593
  """
594
+ if not self.write_timestamps:
595
+ return
596
+
594
597
  threads = self.__dict__.get('_interceptor_threads', [])
595
598
  self._stdout_interceptor = FileDescriptorInterceptor(
596
599
  sys.stdout.fileno(),
@@ -627,10 +630,13 @@ class RotatingFile(io.IOBase):
627
630
  ])
628
631
  self.stop_log_fd_interception(unused_only=True)
629
632
 
633
+
630
634
  def stop_log_fd_interception(self, unused_only: bool = False):
631
635
  """
632
636
  Stop the file descriptor monitoring threads.
633
637
  """
638
+ if not self.write_timestamps:
639
+ return
634
640
  interceptors = self.__dict__.get('_interceptors', [])
635
641
  interceptor_threads = self.__dict__.get('_interceptor_threads', [])
636
642
 
@@ -30,7 +30,7 @@ packages: Dict[str, Dict[str, str]] = {
30
30
  'more_termcolor' : 'more-termcolor>=1.1.3',
31
31
  'humanfriendly' : 'humanfriendly>=10.0.0',
32
32
  },
33
- '_required': {
33
+ 'core': {
34
34
  'wheel' : 'wheel>=0.34.2',
35
35
  'setuptools' : 'setuptools>=63.3.0',
36
36
  'yaml' : 'PyYAML>=5.3.1',
@@ -60,10 +60,10 @@ packages: Dict[str, Dict[str, str]] = {
60
60
  'pymysql' : 'PyMySQL>=0.9.0',
61
61
  'aiomysql' : 'aiomysql>=0.0.21',
62
62
  'sqlalchemy_cockroachdb' : 'sqlalchemy-cockroachdb>=2.0.0',
63
- 'duckdb' : 'duckdb<0.10.0',
64
- 'duckdb_engine' : 'duckdb-engine>=0.9.2',
63
+ 'duckdb' : 'duckdb>=1.0.0',
64
+ 'duckdb_engine' : 'duckdb-engine>=0.13.0',
65
65
  },
66
- '_drivers': {
66
+ 'drivers-extras': {
67
67
  'pyodbc' : 'pyodbc>=4.0.30',
68
68
  'cx_Oracle' : 'cx_Oracle>=8.3.0',
69
69
  },
@@ -130,7 +130,7 @@ packages['sql'] = {
130
130
  'asyncpg' : 'asyncpg>=0.21.0',
131
131
  }
132
132
  packages['sql'].update(packages['drivers'])
133
- packages['sql'].update(packages['_required'])
133
+ packages['sql'].update(packages['core'])
134
134
  packages['dash'] = {
135
135
  'flask_compress' : 'Flask-Compress>=1.10.1',
136
136
  'dash' : 'dash>=2.6.2',
@@ -150,7 +150,6 @@ packages['api'] = {
150
150
  'fastapi_login' : 'fastapi-login>=1.7.2',
151
151
  'multipart' : 'python-multipart>=0.0.9',
152
152
  'httpx' : 'httpx>=0.24.1',
153
- 'websockets' : 'websockets>=11.0.3',
154
153
  }
155
154
  packages['api'].update(packages['sql'])
156
155
  packages['api'].update(packages['formatting'])
@@ -170,7 +169,7 @@ def get_install_names():
170
169
  install_names[get_install_no_version(_install_name)] = _import_name
171
170
  return install_names
172
171
 
173
- skip_groups = {'docs', 'build', 'cli', 'dev-tools', 'portable', 'extras', 'stack', '_drivers'}
172
+ skip_groups = {'docs', 'build', 'cli', 'dev-tools', 'portable', 'extras', 'stack', 'drivers-extras'}
174
173
  full = []
175
174
  _full = {}
176
175
  for group, import_names in packages.items():
@@ -99,7 +99,7 @@ def schedule_function(
99
99
  apscheduler = mrsm.attempt_import('apscheduler', lazy=False)
100
100
  now = round_time(datetime.now(timezone.utc), timedelta(minutes=1))
101
101
  trigger = parse_schedule(schedule, now=now)
102
- _scheduler = apscheduler.AsyncScheduler()
102
+ _scheduler = apscheduler.AsyncScheduler(identity='mrsm-scheduler')
103
103
  try:
104
104
  loop = asyncio.get_running_loop()
105
105
  except RuntimeError:
@@ -107,7 +107,14 @@ def schedule_function(
107
107
 
108
108
  async def run_scheduler():
109
109
  async with _scheduler:
110
- job = await _scheduler.add_schedule(function, trigger, args=args, kwargs=kw)
110
+ job = await _scheduler.add_schedule(
111
+ function,
112
+ trigger,
113
+ args = args,
114
+ kwargs = kw,
115
+ max_running_jobs = 1,
116
+ conflict_policy = apscheduler.ConflictPolicy.replace,
117
+ )
111
118
  try:
112
119
  await _scheduler.run_until_stopped()
113
120
  except (KeyboardInterrupt, SystemExit) as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.2.0rc3
3
+ Version: 2.2.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -31,32 +31,6 @@ Requires-Python: >=3.8
31
31
  Description-Content-Type: text/markdown
32
32
  License-File: LICENSE
33
33
  License-File: NOTICE
34
- Provides-Extra: _drivers
35
- Requires-Dist: pyodbc >=4.0.30 ; extra == '_drivers'
36
- Requires-Dist: cx-Oracle >=8.3.0 ; extra == '_drivers'
37
- Provides-Extra: _required
38
- Requires-Dist: wheel >=0.34.2 ; extra == '_required'
39
- Requires-Dist: setuptools >=63.3.0 ; extra == '_required'
40
- Requires-Dist: PyYAML >=5.3.1 ; extra == '_required'
41
- Requires-Dist: pip >=22.0.4 ; extra == '_required'
42
- Requires-Dist: update-checker >=0.18.0 ; extra == '_required'
43
- Requires-Dist: semver >=3.0.0 ; extra == '_required'
44
- Requires-Dist: pathspec >=0.9.0 ; extra == '_required'
45
- Requires-Dist: python-dateutil >=2.7.5 ; extra == '_required'
46
- Requires-Dist: requests >=2.23.0 ; extra == '_required'
47
- Requires-Dist: binaryornot >=0.4.4 ; extra == '_required'
48
- Requires-Dist: pyvim >=3.0.2 ; extra == '_required'
49
- Requires-Dist: aiofiles >=0.6.0 ; extra == '_required'
50
- Requires-Dist: packaging >=21.3.0 ; extra == '_required'
51
- Requires-Dist: prompt-toolkit >=3.0.39 ; extra == '_required'
52
- Requires-Dist: more-itertools >=8.7.0 ; extra == '_required'
53
- Requires-Dist: python-daemon >=0.2.3 ; extra == '_required'
54
- Requires-Dist: fasteners >=0.18.0 ; extra == '_required'
55
- Requires-Dist: psutil >=5.8.0 ; extra == '_required'
56
- Requires-Dist: watchfiles >=0.21.0 ; extra == '_required'
57
- Requires-Dist: dill >=0.3.3 ; extra == '_required'
58
- Requires-Dist: virtualenv >=20.1.0 ; extra == '_required'
59
- Requires-Dist: APScheduler >=4.0.0a5 ; extra == '_required'
60
34
  Provides-Extra: api
61
35
  Requires-Dist: uvicorn[standard] >=0.29.0 ; extra == 'api'
62
36
  Requires-Dist: gunicorn >=22.0.0 ; extra == 'api'
@@ -81,8 +55,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'api'
81
55
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'api'
82
56
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'api'
83
57
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'api'
84
- Requires-Dist: duckdb <0.10.0 ; extra == 'api'
85
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'api'
58
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'api'
59
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'api'
86
60
  Requires-Dist: wheel >=0.34.2 ; extra == 'api'
87
61
  Requires-Dist: setuptools >=63.3.0 ; extra == 'api'
88
62
  Requires-Dist: PyYAML >=5.3.1 ; extra == 'api'
@@ -130,6 +104,29 @@ Requires-Dist: mycli >=1.23.2 ; extra == 'cli'
130
104
  Requires-Dist: litecli >=1.5.0 ; extra == 'cli'
131
105
  Requires-Dist: mssql-cli >=1.0.0 ; extra == 'cli'
132
106
  Requires-Dist: gadwall >=0.2.0 ; extra == 'cli'
107
+ Provides-Extra: core
108
+ Requires-Dist: wheel >=0.34.2 ; extra == 'core'
109
+ Requires-Dist: setuptools >=63.3.0 ; extra == 'core'
110
+ Requires-Dist: PyYAML >=5.3.1 ; extra == 'core'
111
+ Requires-Dist: pip >=22.0.4 ; extra == 'core'
112
+ Requires-Dist: update-checker >=0.18.0 ; extra == 'core'
113
+ Requires-Dist: semver >=3.0.0 ; extra == 'core'
114
+ Requires-Dist: pathspec >=0.9.0 ; extra == 'core'
115
+ Requires-Dist: python-dateutil >=2.7.5 ; extra == 'core'
116
+ Requires-Dist: requests >=2.23.0 ; extra == 'core'
117
+ Requires-Dist: binaryornot >=0.4.4 ; extra == 'core'
118
+ Requires-Dist: pyvim >=3.0.2 ; extra == 'core'
119
+ Requires-Dist: aiofiles >=0.6.0 ; extra == 'core'
120
+ Requires-Dist: packaging >=21.3.0 ; extra == 'core'
121
+ Requires-Dist: prompt-toolkit >=3.0.39 ; extra == 'core'
122
+ Requires-Dist: more-itertools >=8.7.0 ; extra == 'core'
123
+ Requires-Dist: python-daemon >=0.2.3 ; extra == 'core'
124
+ Requires-Dist: fasteners >=0.18.0 ; extra == 'core'
125
+ Requires-Dist: psutil >=5.8.0 ; extra == 'core'
126
+ Requires-Dist: watchfiles >=0.21.0 ; extra == 'core'
127
+ Requires-Dist: dill >=0.3.3 ; extra == 'core'
128
+ Requires-Dist: virtualenv >=20.1.0 ; extra == 'core'
129
+ Requires-Dist: APScheduler >=4.0.0a5 ; extra == 'core'
133
130
  Provides-Extra: dash
134
131
  Requires-Dist: Flask-Compress >=1.10.1 ; extra == 'dash'
135
132
  Requires-Dist: dash >=2.6.2 ; extra == 'dash'
@@ -164,8 +161,11 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'drivers'
164
161
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'drivers'
165
162
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'drivers'
166
163
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'drivers'
167
- Requires-Dist: duckdb <0.10.0 ; extra == 'drivers'
168
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'drivers'
164
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'drivers'
165
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'drivers'
166
+ Provides-Extra: drivers-extras
167
+ Requires-Dist: pyodbc >=4.0.30 ; extra == 'drivers-extras'
168
+ Requires-Dist: cx-Oracle >=8.3.0 ; extra == 'drivers-extras'
169
169
  Provides-Extra: extras
170
170
  Requires-Dist: cmd2 >=1.4.0 ; extra == 'extras'
171
171
  Requires-Dist: ruamel.yaml >=0.16.12 ; extra == 'extras'
@@ -217,8 +217,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'full'
217
217
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'full'
218
218
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'full'
219
219
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'full'
220
- Requires-Dist: duckdb <0.10.0 ; extra == 'full'
221
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'full'
220
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'full'
221
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'full'
222
222
  Requires-Dist: toga >=0.3.0-dev29 ; extra == 'full'
223
223
  Requires-Dist: pywebview >=3.6.3 ; extra == 'full'
224
224
  Requires-Dist: pycparser >=2.21.0 ; extra == 'full'
@@ -271,8 +271,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'sql'
271
271
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'sql'
272
272
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'sql'
273
273
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'sql'
274
- Requires-Dist: duckdb <0.10.0 ; extra == 'sql'
275
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'sql'
274
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'sql'
275
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'sql'
276
276
  Requires-Dist: wheel >=0.34.2 ; extra == 'sql'
277
277
  Requires-Dist: setuptools >=63.3.0 ; extra == 'sql'
278
278
  Requires-Dist: PyYAML >=5.3.1 ; extra == 'sql'
@@ -1,7 +1,7 @@
1
1
  meerschaum/__init__.py,sha256=mw_PhxT7155SW8d_S51T4-WTibL5g205CwMa3qX8qyA,1487
2
2
  meerschaum/__main__.py,sha256=Q43yra6APe5CdhDp9ngaorUjs8ZoabeYnMa6C5kQchA,2763
3
3
  meerschaum/_internal/__init__.py,sha256=ilC7utfKtin7GAvuN34fKyUQYfPyqH0Mm3MJF5iyEf4,169
4
- meerschaum/_internal/entry.py,sha256=Oga0OH808UtTJGvvkQQFRKjVCjSCRYjJe3M1A9-yf1k,4806
4
+ meerschaum/_internal/entry.py,sha256=_pfnlnXhqzP4XQ5syZ04sDG9LxS5UhNdziBlETDMUhc,5756
5
5
  meerschaum/_internal/arguments/__init__.py,sha256=HFciFQgo2ZOT19Mo6CpLhPYlpLYh2sNn1C9Lo7NMADc,519
6
6
  meerschaum/_internal/arguments/_parse_arguments.py,sha256=dNVDBvXYNgEw-TrlZJ9A6VPlG696EpQcQm6FOAhseqw,10249
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=OtcrZK-_qV9a5qpdcP9NLKOGRevjmCU9fBLbB88px3c,13719
@@ -38,7 +38,7 @@ meerschaum/actions/register.py,sha256=l_21LWZCzKwJVex_xAXECC5WVW1VEuIX9HSp7CuyCw
38
38
  meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
39
39
  meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
40
40
  meerschaum/actions/sh.py,sha256=fLfTJaacKu4sjLTRqEzzYlT2WbbdZBEczsKb6F-qAek,2026
41
- meerschaum/actions/show.py,sha256=9TCiRp_KWjzXkEw3yBInFh2h-qzooj7TAkYd6xhKYbA,29016
41
+ meerschaum/actions/show.py,sha256=p92UahbFeKOThGooO8Ul5Z6s6_Ll54FCxXsMAFnhuT0,29024
42
42
  meerschaum/actions/sql.py,sha256=wYofwk1vGO96U2ncigGEfMtYMZeprz2FR1PRRZhkAPI,4311
43
43
  meerschaum/actions/stack.py,sha256=WMRMebyYwZGNlbnj6Ja09qvCSDNteFJOTa8_joHlnVo,5886
44
44
  meerschaum/actions/start.py,sha256=mNFWqxc_o9moavvDQWE4YoZF6b-SW2nKyw5MtwIj-90,18384
@@ -48,10 +48,10 @@ meerschaum/actions/tag.py,sha256=SJf5qFW0ccLXjqlTdkK_0MCcrCMdg6xhYrhKdco0hdA,305
48
48
  meerschaum/actions/uninstall.py,sha256=2fUd5ZK45VGGCI8V4NLmSnavdKjOv7cGM22x2WlTStw,6068
49
49
  meerschaum/actions/upgrade.py,sha256=VQKyjCGioEF2FYbQmldHh21imDqApNl0xal0rhxzrJk,6302
50
50
  meerschaum/actions/verify.py,sha256=tY5slGpHiWiE0v9TDnjbmxSKn86zBnu9WBpixUgKNQU,4885
51
- meerschaum/api/__init__.py,sha256=TfhjWIyg3AbG74LWhMBpcr487L_4Aak7YNO1rGIV5Vc,7410
51
+ meerschaum/api/__init__.py,sha256=LEAAhOBNT6VHRTiLKWfVxBHBbqeucilHXLelrPkxjZI,7385
52
52
  meerschaum/api/_chain.py,sha256=h8-WXUGXX6AqzdALfsBC5uv0FkAcLdHJXCGzqzuq89k,875
53
53
  meerschaum/api/_events.py,sha256=NrjiabEr7rmHMfxnX07DOGzr9sPiEbRkFqPjuA_8Zx8,1603
54
- meerschaum/api/_oauth2.py,sha256=eH5r2rWuDmMHJPuukG0hj1E-LqtcDf5-lzp1YShOQOo,961
54
+ meerschaum/api/_oauth2.py,sha256=He8JnFDhfCq25Wlz1Jh3TcGz83VOttrJk6RgzJKbFLw,1056
55
55
  meerschaum/api/_websockets.py,sha256=OmrSDGx3xGlfP5XXeLEyYW6-Y3iRUcB-xSqL3RWsjqQ,1609
56
56
  meerschaum/api/dash/__init__.py,sha256=yr4zR7uFPlLFc_lDpwa2rCM1h9ZWGiu5-2XhHcM-5f8,2252
57
57
  meerschaum/api/dash/actions.py,sha256=eUClPPdNVNSCtyq8Ecr1saasxj5VBgd1gcXejvQxXEc,9418
@@ -59,7 +59,7 @@ meerschaum/api/dash/components.py,sha256=hdcxQahw9lHDBlZlztj-IKX4GueZRTVKfjGC6fF
59
59
  meerschaum/api/dash/connectors.py,sha256=nJxBOFldtCMJLYjUSVYZwX5BO-LNjTNHgoEaXe-0XMo,843
60
60
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
61
61
  meerschaum/api/dash/jobs.py,sha256=htqnrtAGCOgn2-THezMGYM8n1E-M-sM5A5qNmOGfHzg,7529
62
- meerschaum/api/dash/keys.py,sha256=anGVwK5pVR5alVQS0oStl7iq9c6klsocENfSjCRdGyQ,12591
62
+ meerschaum/api/dash/keys.py,sha256=hzEVeN60SAfVTVSO5lajGaykxRIKGhj9Ph00HRJnNoE,12598
63
63
  meerschaum/api/dash/pipes.py,sha256=yGlLesL32XiHqt2n28876s49BlGEov2X18ZZhZJRw-M,19233
64
64
  meerschaum/api/dash/plugins.py,sha256=JrLLw2r1Ar7asBgbMbSuiuz8dB9bME41ChynYN2KO-Y,3662
65
65
  meerschaum/api/dash/sync.py,sha256=9lt7IRdG-fe9gf_ZO_viPiGlerX7ic6r_VFocv3I51A,504
@@ -73,13 +73,13 @@ meerschaum/api/dash/assets/favicon.ico,sha256=nDEekVxwS60wEDno1nbw5GF3TJOcDV26SE
73
73
  meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3-80R-dzsxVmw,10218
74
74
  meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
75
75
  meerschaum/api/dash/callbacks/__init__.py,sha256=tAcK0ZX5qAN9mD5f7AYv0IBsGI6vI5r6wswPXfGgJfM,325
76
- meerschaum/api/dash/callbacks/dashboard.py,sha256=LfK3EuaDEdImM0gN7SShnigaxJ4fYxQoBTDeKvw8UFo,32283
76
+ meerschaum/api/dash/callbacks/dashboard.py,sha256=M3VJoRoI89jjPLSQejwp5v56-nkzs-g30r6rRvwIkCQ,32301
77
77
  meerschaum/api/dash/callbacks/jobs.py,sha256=OEYxJRlmnxqbsvHb5jBJJCsRvVCsMNusm9AClCT9Pm0,7689
78
78
  meerschaum/api/dash/callbacks/login.py,sha256=dfl0EOkEUcF7a-u8fq0WGNtwV63714ds30yWfOM2rqE,2613
79
79
  meerschaum/api/dash/callbacks/plugins.py,sha256=7CrwwbBI2N3DR4Yb1bKmrtJ3cAQ3dVv1l6E_AtZ6Wng,2777
80
80
  meerschaum/api/dash/callbacks/register.py,sha256=9AgTcl--TPt6oETKzirQCkH9Azlm3XrU9U6XJM2b8Lk,3600
81
81
  meerschaum/api/dash/pages/__init__.py,sha256=1g3KAVYklZ5L8bpW-LfG5jBXRebnUeA_wmNsuIMRZEE,273
82
- meerschaum/api/dash/pages/dashboard.py,sha256=rD4UVu_9K2UOLQJR7_Wsv50Tn-RTnGMrivGP55_Q_Dg,3930
82
+ meerschaum/api/dash/pages/dashboard.py,sha256=WKwy40kgm2Qy0k1ZTIueFnnVu0YBzFAd_8AT6CHHvfM,3835
83
83
  meerschaum/api/dash/pages/error.py,sha256=-uCrASuIBrceHcc-leLeEoLos2ibSBWG0XMFQzFwtbw,595
84
84
  meerschaum/api/dash/pages/login.py,sha256=FXPUuakS1SBsa3vSQShRX-Py5FwFvd7poeBUahmIB8A,4600
85
85
  meerschaum/api/dash/pages/plugins.py,sha256=9VpRqWW-3OhgZDUoo4J8PYswd231HaxlcSntxOOKsQA,1549
@@ -128,14 +128,14 @@ meerschaum/config/_default.py,sha256=DSbyVcAL55Xf8MJCTxpgF7ZXL-O9peeMEqL29WFfsJ4
128
128
  meerschaum/config/_edit.py,sha256=CE8gumBiOtnZZdTATCLAZgUnhL04yJdReaNCrv1yuJc,8218
129
129
  meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-wCrgo,4419
130
130
  meerschaum/config/_formatting.py,sha256=RT_oU0OSfUkzeqbY5jvEJwuove_t9sP4MyUb1Px250U,6635
131
- meerschaum/config/_jobs.py,sha256=ki3Wb3QejAXyJhbBfme21EBhEntiOa6Pynp5OMfffp0,1227
131
+ meerschaum/config/_jobs.py,sha256=2bEikO48qVSguFS3lrbWz6uiKt_0b3oSRWhwyz8RRDM,1279
132
132
  meerschaum/config/_patch.py,sha256=21N30q1ANmWMDQ-2RUjpMx7KafWfPQ3lKx9rrMqg1s4,1526
133
133
  meerschaum/config/_paths.py,sha256=TihDGA6IQou3ms1xKYHmRTU48kOflqV5ZOMguG25NM4,8154
134
134
  meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6wLs,1220
135
135
  meerschaum/config/_read_config.py,sha256=WFZKIXZMDe_ca0ES7ivgM_mnwShvFxLdoeisT_X5-h0,14720
136
136
  meerschaum/config/_shell.py,sha256=s74cmJl8NrhM_Y1cB_P41_JDUYXV0g4WXnKFZWMtnrY,3551
137
137
  meerschaum/config/_sync.py,sha256=oK2ZujO2T1he08BXCFyiniBUevNGWSQKXLcS_jRv_7Y,4155
138
- meerschaum/config/_version.py,sha256=2-cyfpj01b8gfsTjUSjwd1-HjDjJ9lsq--ZPCqI2ZgA,74
138
+ meerschaum/config/_version.py,sha256=OydT3amCDUZG1dyzap3MREBRuMd53MMaduOv0qZtPL8,71
139
139
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  meerschaum/config/stack/__init__.py,sha256=c_WdTSejVdj8lqSE_pK5MhIBkHoftiZWDuEuB9dmk2I,9007
141
141
  meerschaum/config/stack/grafana/__init__.py,sha256=LNXQw2FvHKrD68RDhqDmi2wJjAHaKw9IWx8rNuyWEPo,2010
@@ -144,7 +144,7 @@ meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TIm
144
144
  meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  meerschaum/config/static/__init__.py,sha256=zsSq54OkLqjfG_QGyH6zXzZnoaGpDyjmV0OCvbygFr8,4474
146
146
  meerschaum/connectors/Connector.py,sha256=cJKinmk7eWZwCBvtX4H9r66macTZOY1qjxR7JUEmDmg,6381
147
- meerschaum/connectors/__init__.py,sha256=OCNfIEeuom6g7GOO3xj37YAuxLOesGCZ-VrcltyHsSY,12071
147
+ meerschaum/connectors/__init__.py,sha256=zXumYuKTWOyu3U6J1zvMQS30HImYLE8ssBdJs-I134M,12106
148
148
  meerschaum/connectors/parse.py,sha256=gidA2jvOLTvEeL5hM9JjcUwkMRBadUhd4IfA5Jy1tgg,4044
149
149
  meerschaum/connectors/poll.py,sha256=gIY9TvFBqMvMNQvR0O2No7koLLz2PjfExBr_Dsosgpg,7363
150
150
  meerschaum/connectors/api/APIConnector.py,sha256=pj-RncLhDUEBK7R4tByH6nrxZWU8zxGVOS2Wyik36zs,4355
@@ -162,11 +162,11 @@ meerschaum/connectors/plugin/PluginConnector.py,sha256=aQ1QaB7MordCFimZqoGLb0R12
162
162
  meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPHgzOqsGcoXJw,198
163
163
  meerschaum/connectors/sql/SQLConnector.py,sha256=QvsFgAv2NAUdsJrcNYZIkQ9x_ow5JRe4Ie_UgSrDz3M,11709
164
164
  meerschaum/connectors/sql/__init__.py,sha256=xwSYhYuketTXhQLXyD9pZ0NNBPboW5Oqv9zrKfjx0Ic,175
165
- meerschaum/connectors/sql/_cli.py,sha256=XaWjWZzGIfhMiYoXAs2FrwHUGNyZpxIzH4g4xugLKsw,4123
165
+ meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9hUXA,4405
166
166
  meerschaum/connectors/sql/_create_engine.py,sha256=vPVwR3cpfcQm0aW9xo_DUWA3gMdlkuB0wJ8JoTpRYD0,10396
167
167
  meerschaum/connectors/sql/_fetch.py,sha256=NYYWDoEd-aGIS337KwH-D9_3KVWVCZOHAspGLfdEuUE,13086
168
168
  meerschaum/connectors/sql/_instance.py,sha256=r_S96vzSuKnBVGROSKQAPl-DnFnOOEPUkz1KFDFPHFQ,6509
169
- meerschaum/connectors/sql/_pipes.py,sha256=WruMoLGMckUIardNtYzC7P0gavaz_HVlDb-IMv3pF9s,101357
169
+ meerschaum/connectors/sql/_pipes.py,sha256=0FeRmmZueWBfgBo6XFKcidC7l8eBTDUY12-DbdrXOsk,101627
170
170
  meerschaum/connectors/sql/_plugins.py,sha256=OsCmDlZKyJnY77QAWghmpuXR0z_CmFq5uHpZK7Cj-ZI,8321
171
171
  meerschaum/connectors/sql/_sql.py,sha256=553BTPtvnnLMERYK8IcxR4CS3R4Sq7id-5hbApOEsIU,34199
172
172
  meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
@@ -205,15 +205,15 @@ meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRU
205
205
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
206
206
  meerschaum/utils/process.py,sha256=IHnUhX79XofHwMsOs1A_irLMa7i48xXB-GCL83MtZOY,7192
207
207
  meerschaum/utils/prompt.py,sha256=0mBFbgi_l9rCou9UnC_6qKTHkqyl1Z_jSRzfmc0xRXM,16490
208
- meerschaum/utils/schedule.py,sha256=coJm8s91DZjezv4h9dkgUkU3R_O7gWJUBojxjItkrCQ,10654
208
+ meerschaum/utils/schedule.py,sha256=2UpXg5E9mfjg83w3N6C2_Q7tlE2exVJehro2Bvp6PzQ,10871
209
209
  meerschaum/utils/sql.py,sha256=4sCNEpgUd6uFz6ySs4nnUMVaOT0YAvPM1ZlQYJTSF-0,46656
210
210
  meerschaum/utils/threading.py,sha256=3N8JXPAnwqJiSjuQcbbJg3Rv9-CCUMJpeQRfKFR7MaA,2489
211
211
  meerschaum/utils/typing.py,sha256=L05wOXfWdn_nJ0KnZVr-2zdMYcqjdyOW_7InT3xe6-s,2807
212
212
  meerschaum/utils/warnings.py,sha256=0b5O2DBbhEAGnu6RAB1hlHSVmwL_hcR3EiMkExXmBJ0,6535
213
213
  meerschaum/utils/yaml.py,sha256=vbCrFjdapKsZ9wRRaI9Ih8dVUwZ-KHpSzfGhRcpDBgQ,3162
214
- meerschaum/utils/daemon/Daemon.py,sha256=2e929fSd79TokURbgw5G3Cyopp_ztmV2_YxrJZYJB2Y,34414
214
+ meerschaum/utils/daemon/Daemon.py,sha256=iZzlPMF237sidfQJ3iNrhGJpV6onvEo1_9qtv9pE1j4,34595
215
215
  meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=1cn5nQYLImL-BHXlLoxN_TadgN7XmGRLl1b7xecYMPc,4544
216
- meerschaum/utils/daemon/RotatingFile.py,sha256=qFGlpPVa_j1VCc_S6UtsAQ4nZyxGYLajFyXmAh-UfT4,23499
216
+ meerschaum/utils/daemon/RotatingFile.py,sha256=LuaHPs-c4GaMc3VkMjvL6WJ5r7wmMUOm9ZLyk4OHAlg,23658
217
217
  meerschaum/utils/daemon/__init__.py,sha256=I_ki51yml4vsh9OoH7BWTaz9SnATD8qM0i0fN3aUMn0,8375
218
218
  meerschaum/utils/daemon/_names.py,sha256=Prf7xA2GWDbKR_9Xq9_5RTTIf9GNWY3Yt0s4tEU3JgM,4330
219
219
  meerschaum/utils/dtypes/__init__.py,sha256=JR9PViJTzhukZhq0QoPIs73HOnXZZr8OmfhAAD4OAUA,6261
@@ -224,15 +224,15 @@ meerschaum/utils/formatting/_pipes.py,sha256=wy0iWJFsFl3X2VloaiA_gp9Yx9w6tD3FQZv
224
224
  meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
225
225
  meerschaum/utils/formatting/_shell.py,sha256=ox75O7VHDAiwzSvdMSJZhXLadvAqYJVeihU6WeZ2Ogc,3677
226
226
  meerschaum/utils/packages/__init__.py,sha256=HEJYz_rceqljpyRFlnToLR6vc_b7r-2d2K8zh_th2lg,57185
227
- meerschaum/utils/packages/_packages.py,sha256=EJ6nBHECMUj0UBeMZ0BWA5c1NlGPgvHE_37VcjPvUoo,7923
227
+ meerschaum/utils/packages/_packages.py,sha256=P1Y0mc0TlX5iCL08U-4WkMG9LpEt_REWo30GJUn38cM,7865
228
228
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
229
229
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
230
230
  meerschaum/utils/venv/__init__.py,sha256=sj-n8scWH2NPDJGAxfpqzsYqVUt2jMEr-7Uq9G7YUNQ,23183
231
- meerschaum-2.2.0rc3.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
232
- meerschaum-2.2.0rc3.dist-info/METADATA,sha256=FCRvolp0e892DTcU7zLQzgnG2csLBwyQXPNfR7c41-M,23903
233
- meerschaum-2.2.0rc3.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
234
- meerschaum-2.2.0rc3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
235
- meerschaum-2.2.0rc3.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
236
- meerschaum-2.2.0rc3.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
237
- meerschaum-2.2.0rc3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
238
- meerschaum-2.2.0rc3.dist-info/RECORD,,
231
+ meerschaum-2.2.1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
232
+ meerschaum-2.2.1.dist-info/METADATA,sha256=XUYdU9OV2qtydf3XiXIvkA0gE-Nikh43zj_KRqA4ruo,23807
233
+ meerschaum-2.2.1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
234
+ meerschaum-2.2.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
235
+ meerschaum-2.2.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
236
+ meerschaum-2.2.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
237
+ meerschaum-2.2.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
238
+ meerschaum-2.2.1.dist-info/RECORD,,