meerschaum 2.7.4__py3-none-any.whl → 2.7.6__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.
- meerschaum/_internal/shell/Shell.py +4 -6
 - meerschaum/_internal/shell/ShellCompleter.py +6 -5
 - meerschaum/actions/clear.py +6 -3
 - meerschaum/actions/copy.py +33 -27
 - meerschaum/actions/sql.py +14 -4
 - meerschaum/actions/sync.py +22 -18
 - meerschaum/api/dash/pipes.py +2 -3
 - meerschaum/config/_default.py +11 -0
 - meerschaum/config/_version.py +1 -1
 - meerschaum/connectors/api/_misc.py +3 -2
 - meerschaum/connectors/api/_pipes.py +8 -9
 - meerschaum/connectors/sql/_SQLConnector.py +1 -0
 - meerschaum/connectors/sql/_cli.py +18 -12
 - meerschaum/connectors/sql/_create_engine.py +1 -0
 - meerschaum/connectors/sql/_pipes.py +51 -14
 - meerschaum/connectors/sql/_sql.py +109 -16
 - meerschaum/jobs/_Job.py +1 -0
 - meerschaum/plugins/__init__.py +7 -3
 - meerschaum/utils/daemon/Daemon.py +11 -3
 - meerschaum/utils/daemon/__init__.py +2 -2
 - meerschaum/utils/misc.py +7 -6
 - meerschaum/utils/packages/__init__.py +35 -28
 - meerschaum/utils/packages/_packages.py +1 -1
 - meerschaum/utils/prompt.py +54 -36
 - meerschaum/utils/venv/_Venv.py +6 -1
 - meerschaum/utils/venv/__init__.py +32 -16
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/METADATA +4 -4
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/RECORD +34 -34
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/WHEEL +1 -1
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/LICENSE +0 -0
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/NOTICE +0 -0
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/entry_points.txt +0 -0
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/top_level.txt +0 -0
 - {meerschaum-2.7.4.dist-info → meerschaum-2.7.6.dist-info}/zip-safe +0 -0
 
    
        meerschaum/utils/prompt.py
    CHANGED
    
    | 
         @@ -7,7 +7,9 @@ Functions for interacting with the user. 
     | 
|
| 
       7 
7 
     | 
    
         
             
            """
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            from __future__ import annotations
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       10 
11 
     | 
    
         
             
            import os
         
     | 
| 
      
 12 
     | 
    
         
            +
            import meerschaum as mrsm
         
     | 
| 
       11 
13 
     | 
    
         
             
            from meerschaum.utils.typing import Any, Union, Optional, Tuple, List
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
15 
     | 
    
         | 
| 
         @@ -63,9 +65,8 @@ def prompt( 
     | 
|
| 
       63 
65 
     | 
    
         | 
| 
       64 
66 
     | 
    
         
             
                """
         
     | 
| 
       65 
67 
     | 
    
         
             
                from meerschaum.utils.packages import attempt_import
         
     | 
| 
       66 
     | 
    
         
            -
                from meerschaum.utils.formatting import  
     | 
| 
      
 68 
     | 
    
         
            +
                from meerschaum.utils.formatting import ANSI, CHARSET, highlight_pipes, fill_ansi
         
     | 
| 
       67 
69 
     | 
    
         
             
                from meerschaum.config import get_config
         
     | 
| 
       68 
     | 
    
         
            -
                from meerschaum.config.static import _static_config
         
     | 
| 
       69 
70 
     | 
    
         
             
                from meerschaum.utils.misc import filter_keywords
         
     | 
| 
       70 
71 
     | 
    
         
             
                from meerschaum.utils.daemon import running_in_daemon
         
     | 
| 
       71 
72 
     | 
    
         
             
                noask = check_noask(noask)
         
     | 
| 
         @@ -175,8 +176,6 @@ def yes_no( 
     | 
|
| 
       175 
176 
     | 
    
         
             
                ```
         
     | 
| 
       176 
177 
     | 
    
         
             
                """
         
     | 
| 
       177 
178 
     | 
    
         
             
                from meerschaum.utils.warnings import error, warn
         
     | 
| 
       178 
     | 
    
         
            -
                from meerschaum.utils.formatting import ANSI, UNICODE
         
     | 
| 
       179 
     | 
    
         
            -
                from meerschaum.utils.packages import attempt_import
         
     | 
| 
       180 
179 
     | 
    
         | 
| 
       181 
180 
     | 
    
         
             
                default = options[0] if yes else default
         
     | 
| 
       182 
181 
     | 
    
         
             
                noask = yes or check_noask(noask)
         
     | 
| 
         @@ -195,7 +194,7 @@ def yes_no( 
     | 
|
| 
       195 
194 
     | 
    
         
             
                        success = False
         
     | 
| 
       196 
195 
     | 
    
         | 
| 
       197 
196 
     | 
    
         
             
                    if not success:
         
     | 
| 
       198 
     | 
    
         
            -
                        error( 
     | 
| 
      
 197 
     | 
    
         
            +
                        error("Error getting response. Aborting...", stack=False)
         
     | 
| 
       199 
198 
     | 
    
         
             
                    if answer == "":
         
     | 
| 
       200 
199 
     | 
    
         
             
                        answer = default
         
     | 
| 
       201 
200 
     | 
    
         | 
| 
         @@ -205,19 +204,20 @@ def yes_no( 
     | 
|
| 
       205 
204 
     | 
    
         | 
| 
       206 
205 
     | 
    
         
             
                return answer.lower() == options[0].lower()
         
     | 
| 
       207 
206 
     | 
    
         | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
       208 
208 
     | 
    
         
             
            def choose(
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
             
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
             
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
      
 209 
     | 
    
         
            +
                question: str,
         
     | 
| 
      
 210 
     | 
    
         
            +
                choices: List[Union[str, Tuple[str, str]]],
         
     | 
| 
      
 211 
     | 
    
         
            +
                default: Union[str, List[str], None] = None,
         
     | 
| 
      
 212 
     | 
    
         
            +
                numeric: bool = True,
         
     | 
| 
      
 213 
     | 
    
         
            +
                multiple: bool = False,
         
     | 
| 
      
 214 
     | 
    
         
            +
                as_indices: bool = False,
         
     | 
| 
      
 215 
     | 
    
         
            +
                delimiter: str = ',',
         
     | 
| 
      
 216 
     | 
    
         
            +
                icon: bool = True,
         
     | 
| 
      
 217 
     | 
    
         
            +
                warn: bool = True,
         
     | 
| 
      
 218 
     | 
    
         
            +
                noask: bool = False,
         
     | 
| 
      
 219 
     | 
    
         
            +
                **kw
         
     | 
| 
      
 220 
     | 
    
         
            +
            ) -> Union[str, Tuple[str], None]:
         
     | 
| 
       221 
221 
     | 
    
         
             
                """
         
     | 
| 
       222 
222 
     | 
    
         
             
                Present a list of options and return the user's choice.
         
     | 
| 
       223 
223 
     | 
    
         | 
| 
         @@ -418,8 +418,8 @@ def choose( 
     | 
|
| 
       418 
418 
     | 
    
         
             
                    valid = (len(answers) > 1 or not (len(answers) == 1 and answers[0] is None))
         
     | 
| 
       419 
419 
     | 
    
         
             
                    for a in answers:
         
     | 
| 
       420 
420 
     | 
    
         
             
                        if (
         
     | 
| 
       421 
     | 
    
         
            -
                            not  
     | 
| 
       422 
     | 
    
         
            -
                            and not  
     | 
| 
      
 421 
     | 
    
         
            +
                            a not in {_original for _new, _original in altered_choices.items()}
         
     | 
| 
      
 422 
     | 
    
         
            +
                            and a not in _choices
         
     | 
| 
       423 
423 
     | 
    
         
             
                            and a != default
         
     | 
| 
       424 
424 
     | 
    
         
             
                            and not noask
         
     | 
| 
       425 
425 
     | 
    
         
             
                        ):
         
     | 
| 
         @@ -428,21 +428,22 @@ def choose( 
     | 
|
| 
       428 
428 
     | 
    
         
             
                    if valid:
         
     | 
| 
       429 
429 
     | 
    
         
             
                        break
         
     | 
| 
       430 
430 
     | 
    
         
             
                    if warn:
         
     | 
| 
       431 
     | 
    
         
            -
                        _warn( 
     | 
| 
      
 431 
     | 
    
         
            +
                        _warn("Please pick a valid choice.", stack=False)
         
     | 
| 
       432 
432 
     | 
    
         | 
| 
       433 
433 
     | 
    
         
             
                if not multiple:
         
     | 
| 
       434 
434 
     | 
    
         
             
                    if not numeric:
         
     | 
| 
       435 
435 
     | 
    
         
             
                        return answer
         
     | 
| 
       436 
436 
     | 
    
         
             
                    try:
         
     | 
| 
       437 
437 
     | 
    
         
             
                        _answer = choices[int(answer) - 1]
         
     | 
| 
       438 
     | 
    
         
            -
                        if as_indices and isinstance( 
     | 
| 
      
 438 
     | 
    
         
            +
                        if as_indices and isinstance(_answer, tuple):
         
     | 
| 
       439 
439 
     | 
    
         
             
                            return _answer[0]
         
     | 
| 
       440 
440 
     | 
    
         
             
                        return _answer
         
     | 
| 
       441 
     | 
    
         
            -
                    except Exception 
     | 
| 
      
 441 
     | 
    
         
            +
                    except Exception:
         
     | 
| 
       442 
442 
     | 
    
         
             
                        _warn(f"Could not cast answer '{answer}' to an integer.", stacklevel=3)
         
     | 
| 
       443 
443 
     | 
    
         | 
| 
       444 
444 
     | 
    
         
             
                if not numeric:
         
     | 
| 
       445 
445 
     | 
    
         
             
                    return answers
         
     | 
| 
      
 446 
     | 
    
         
            +
             
     | 
| 
       446 
447 
     | 
    
         
             
                _answers = []
         
     | 
| 
       447 
448 
     | 
    
         
             
                for a in answers:
         
     | 
| 
       448 
449 
     | 
    
         
             
                    try:
         
     | 
| 
         @@ -451,17 +452,17 @@ def choose( 
     | 
|
| 
       451 
452 
     | 
    
         
             
                        if isinstance(_answer_to_return, tuple) and as_indices:
         
     | 
| 
       452 
453 
     | 
    
         
             
                            _answer_to_return = _answer_to_return[0]
         
     | 
| 
       453 
454 
     | 
    
         
             
                        _answers.append(_answer_to_return)
         
     | 
| 
       454 
     | 
    
         
            -
                    except Exception 
     | 
| 
      
 455 
     | 
    
         
            +
                    except Exception:
         
     | 
| 
       455 
456 
     | 
    
         
             
                        _warn(f"Could not cast answer '{a}' to an integer.", stacklevel=3)
         
     | 
| 
       456 
457 
     | 
    
         
             
                return _answers
         
     | 
| 
       457 
458 
     | 
    
         | 
| 
       458 
459 
     | 
    
         | 
| 
       459 
460 
     | 
    
         
             
            def get_password(
         
     | 
| 
       460 
     | 
    
         
            -
             
     | 
| 
       461 
     | 
    
         
            -
             
     | 
| 
       462 
     | 
    
         
            -
             
     | 
| 
       463 
     | 
    
         
            -
             
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
      
 461 
     | 
    
         
            +
                username: Optional[str] = None,
         
     | 
| 
      
 462 
     | 
    
         
            +
                minimum_length: Optional[int] = None,
         
     | 
| 
      
 463 
     | 
    
         
            +
                confirm: bool = True,
         
     | 
| 
      
 464 
     | 
    
         
            +
                **kw: Any
         
     | 
| 
      
 465 
     | 
    
         
            +
            ) -> str:
         
     | 
| 
       465 
466 
     | 
    
         
             
                """
         
     | 
| 
       466 
467 
     | 
    
         
             
                Prompt the user for a password.
         
     | 
| 
       467 
468 
     | 
    
         | 
| 
         @@ -493,15 +494,15 @@ def get_password( 
     | 
|
| 
       493 
494 
     | 
    
         
             
                from meerschaum.utils.warnings import warn
         
     | 
| 
       494 
495 
     | 
    
         
             
                while True:
         
     | 
| 
       495 
496 
     | 
    
         
             
                    password = prompt(
         
     | 
| 
       496 
     | 
    
         
            -
                         
     | 
| 
       497 
     | 
    
         
            -
                        is_password 
     | 
| 
      
 497 
     | 
    
         
            +
                        "Password" + (f" for user '{username}':" if username is not None else ":"),
         
     | 
| 
      
 498 
     | 
    
         
            +
                        is_password=True,
         
     | 
| 
       498 
499 
     | 
    
         
             
                        **kw
         
     | 
| 
       499 
500 
     | 
    
         
             
                    )
         
     | 
| 
       500 
501 
     | 
    
         
             
                    if minimum_length is not None and len(password) < minimum_length:
         
     | 
| 
       501 
502 
     | 
    
         
             
                        warn(
         
     | 
| 
       502 
503 
     | 
    
         
             
                            "Password is too short. " +
         
     | 
| 
       503 
504 
     | 
    
         
             
                            f"Please enter a password that is at least {minimum_length} characters.",
         
     | 
| 
       504 
     | 
    
         
            -
                            stack 
     | 
| 
      
 505 
     | 
    
         
            +
                            stack=False
         
     | 
| 
       505 
506 
     | 
    
         
             
                        )
         
     | 
| 
       506 
507 
     | 
    
         
             
                        continue
         
     | 
| 
       507 
508 
     | 
    
         | 
| 
         @@ -509,12 +510,12 @@ def get_password( 
     | 
|
| 
       509 
510 
     | 
    
         
             
                        return password
         
     | 
| 
       510 
511 
     | 
    
         | 
| 
       511 
512 
     | 
    
         
             
                    _password = prompt(
         
     | 
| 
       512 
     | 
    
         
            -
                         
     | 
| 
       513 
     | 
    
         
            -
                        is_password 
     | 
| 
      
 513 
     | 
    
         
            +
                        "Confirm password" + (f" for user '{username}':" if username is not None else ":"),
         
     | 
| 
      
 514 
     | 
    
         
            +
                        is_password=True,
         
     | 
| 
       514 
515 
     | 
    
         
             
                        **kw
         
     | 
| 
       515 
516 
     | 
    
         
             
                    )
         
     | 
| 
       516 
517 
     | 
    
         
             
                    if password != _password:
         
     | 
| 
       517 
     | 
    
         
            -
                        warn( 
     | 
| 
      
 518 
     | 
    
         
            +
                        warn("Passwords do not match! Please try again.", stack=False)
         
     | 
| 
       518 
519 
     | 
    
         
             
                        continue
         
     | 
| 
       519 
520 
     | 
    
         
             
                    else:
         
     | 
| 
       520 
521 
     | 
    
         
             
                        return password
         
     | 
| 
         @@ -550,13 +551,13 @@ def get_email(username: Optional[str] = None, allow_omit: bool = True, **kw: Any 
     | 
|
| 
       550 
551 
     | 
    
         
             
                from meerschaum.utils.misc import is_valid_email
         
     | 
| 
       551 
552 
     | 
    
         
             
                while True:
         
     | 
| 
       552 
553 
     | 
    
         
             
                    email = prompt(
         
     | 
| 
       553 
     | 
    
         
            -
                         
     | 
| 
      
 554 
     | 
    
         
            +
                        "Email" + (f" for user '{username}'" if username is not None else "") +
         
     | 
| 
       554 
555 
     | 
    
         
             
                        (" (empty to omit):" if allow_omit else ": "),
         
     | 
| 
       555 
556 
     | 
    
         
             
                        **kw
         
     | 
| 
       556 
557 
     | 
    
         
             
                    )
         
     | 
| 
       557 
558 
     | 
    
         
             
                    if (allow_omit and email == '') or is_valid_email(email):
         
     | 
| 
       558 
559 
     | 
    
         
             
                        return email
         
     | 
| 
       559 
     | 
    
         
            -
                    warn( 
     | 
| 
      
 560 
     | 
    
         
            +
                    warn("Invalid email! Please try again.", stack=False)
         
     | 
| 
       560 
561 
     | 
    
         | 
| 
       561 
562 
     | 
    
         | 
| 
       562 
563 
     | 
    
         
             
            def check_noask(noask: bool = False) -> bool:
         
     | 
| 
         @@ -571,3 +572,20 @@ def check_noask(noask: bool = False) -> bool: 
     | 
|
| 
       571 
572 
     | 
    
         
             
                    os.environ.get(NOASK, 'false').lower()
         
     | 
| 
       572 
573 
     | 
    
         
             
                    in ('1', 'true')
         
     | 
| 
       573 
574 
     | 
    
         
             
                )
         
     | 
| 
      
 575 
     | 
    
         
            +
             
     | 
| 
      
 576 
     | 
    
         
            +
             
     | 
| 
      
 577 
     | 
    
         
            +
            def get_connectors_completer(*types: str):
         
     | 
| 
      
 578 
     | 
    
         
            +
                """
         
     | 
| 
      
 579 
     | 
    
         
            +
                Return a prompt-toolkit Completer object to pass into `prompt()`.
         
     | 
| 
      
 580 
     | 
    
         
            +
                """
         
     | 
| 
      
 581 
     | 
    
         
            +
                from meerschaum.utils.misc import get_connector_labels
         
     | 
| 
      
 582 
     | 
    
         
            +
                prompt_toolkit_completion = mrsm.attempt_import('prompt_toolkit.completion', lazy=False)
         
     | 
| 
      
 583 
     | 
    
         
            +
                Completer = prompt_toolkit_completion.Completer
         
     | 
| 
      
 584 
     | 
    
         
            +
                Completion = prompt_toolkit_completion.Completion
         
     | 
| 
      
 585 
     | 
    
         
            +
             
     | 
| 
      
 586 
     | 
    
         
            +
                class ConnectorCompleter(Completer):
         
     | 
| 
      
 587 
     | 
    
         
            +
                    def get_completions(self, document, complete_event):
         
     | 
| 
      
 588 
     | 
    
         
            +
                        for label in get_connector_labels(*types):
         
     | 
| 
      
 589 
     | 
    
         
            +
                            yield Completion(label, start_position=(-1 * len(document.text)))
         
     | 
| 
      
 590 
     | 
    
         
            +
             
     | 
| 
      
 591 
     | 
    
         
            +
                return ConnectorCompleter()
         
     | 
    
        meerschaum/utils/venv/_Venv.py
    CHANGED
    
    | 
         @@ -62,8 +62,13 @@ class Venv: 
     | 
|
| 
       62 
62 
     | 
    
         
             
                    If a `meerschaum.plugins.Plugin` was provided, its dependent virtual environments
         
     | 
| 
       63 
63 
     | 
    
         
             
                    will also be activated.
         
     | 
| 
       64 
64 
     | 
    
         
             
                    """
         
     | 
| 
       65 
     | 
    
         
            -
                    from meerschaum.utils.venv import active_venvs
         
     | 
| 
      
 65 
     | 
    
         
            +
                    from meerschaum.utils.venv import active_venvs, init_venv
         
     | 
| 
       66 
66 
     | 
    
         
             
                    self._kwargs['previously_active_venvs'] = copy.deepcopy(active_venvs)
         
     | 
| 
      
 67 
     | 
    
         
            +
                    try:
         
     | 
| 
      
 68 
     | 
    
         
            +
                        return self._activate(debug=(debug or self._debug), **self._kwargs)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    except OSError as e:
         
     | 
| 
      
 70 
     | 
    
         
            +
                        if not init_venv(self._venv, force=True):
         
     | 
| 
      
 71 
     | 
    
         
            +
                            raise e
         
     | 
| 
       67 
72 
     | 
    
         
             
                    return self._activate(debug=(debug or self._debug), **self._kwargs)
         
     | 
| 
       68 
73 
     | 
    
         | 
| 
       69 
74 
     | 
    
         | 
| 
         @@ -176,23 +176,26 @@ def deactivate_venv( 
     | 
|
| 
       176 
176 
     | 
    
         
             
                if sys.path is None:
         
     | 
| 
       177 
177 
     | 
    
         
             
                    return False
         
     | 
| 
       178 
178 
     | 
    
         | 
| 
       179 
     | 
    
         
            -
                target = venv_target_path(venv, allow_nonexistent= 
     | 
| 
      
 179 
     | 
    
         
            +
                target = venv_target_path(venv, allow_nonexistent=True, debug=debug).as_posix()
         
     | 
| 
       180 
180 
     | 
    
         
             
                with LOCKS['sys.path']:
         
     | 
| 
       181 
181 
     | 
    
         
             
                    if target in sys.path:
         
     | 
| 
       182 
     | 
    
         
            -
                         
     | 
| 
      
 182 
     | 
    
         
            +
                        try:
         
     | 
| 
      
 183 
     | 
    
         
            +
                            sys.path.remove(target)
         
     | 
| 
      
 184 
     | 
    
         
            +
                        except Exception:
         
     | 
| 
      
 185 
     | 
    
         
            +
                            pass
         
     | 
| 
       183 
186 
     | 
    
         
             
                        try:
         
     | 
| 
       184 
187 
     | 
    
         
             
                            active_venvs_order.remove(venv)
         
     | 
| 
       185 
     | 
    
         
            -
                        except Exception 
     | 
| 
      
 188 
     | 
    
         
            +
                        except Exception:
         
     | 
| 
       186 
189 
     | 
    
         
             
                            pass
         
     | 
| 
       187 
190 
     | 
    
         | 
| 
       188 
191 
     | 
    
         
             
                return True
         
     | 
| 
       189 
192 
     | 
    
         | 
| 
       190 
193 
     | 
    
         | 
| 
       191 
194 
     | 
    
         
             
            def is_venv_active(
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
      
 195 
     | 
    
         
            +
                venv: str = 'mrsm',
         
     | 
| 
      
 196 
     | 
    
         
            +
                color : bool = True,
         
     | 
| 
      
 197 
     | 
    
         
            +
                debug: bool = False
         
     | 
| 
      
 198 
     | 
    
         
            +
            ) -> bool:
         
     | 
| 
       196 
199 
     | 
    
         
             
                """
         
     | 
| 
       197 
200 
     | 
    
         
             
                Check if a virtual environment is active.
         
     | 
| 
       198 
201 
     | 
    
         | 
| 
         @@ -407,10 +410,10 @@ def init_venv( 
     | 
|
| 
       407 
410 
     | 
    
         
             
                        pass
         
     | 
| 
       408 
411 
     | 
    
         | 
| 
       409 
412 
     | 
    
         
             
                def wait_for_lock():
         
     | 
| 
       410 
     | 
    
         
            -
                    max_lock_seconds =  
     | 
| 
      
 413 
     | 
    
         
            +
                    max_lock_seconds = 2.0
         
     | 
| 
       411 
414 
     | 
    
         
             
                    step_sleep_seconds = 0.1
         
     | 
| 
       412 
415 
     | 
    
         
             
                    init_venv_check_start = time.perf_counter()
         
     | 
| 
       413 
     | 
    
         
            -
                    while (time.perf_counter() - init_venv_check_start < max_lock_seconds):
         
     | 
| 
      
 416 
     | 
    
         
            +
                    while ((time.perf_counter() - init_venv_check_start) < max_lock_seconds):
         
     | 
| 
       414 
417 
     | 
    
         
             
                        if not lock_path.exists():
         
     | 
| 
       415 
418 
     | 
    
         
             
                            break
         
     | 
| 
       416 
419 
     | 
    
         | 
| 
         @@ -447,13 +450,22 @@ def init_venv( 
     | 
|
| 
       447 
450 
     | 
    
         
             
                temp_vtp = VENVS_CACHE_RESOURCES_PATH / str(venv)
         
     | 
| 
       448 
451 
     | 
    
         
             
                rename_vtp = vtp.exists() and not temp_vtp.exists()
         
     | 
| 
       449 
452 
     | 
    
         | 
| 
      
 453 
     | 
    
         
            +
                wait_for_lock()
         
     | 
| 
      
 454 
     | 
    
         
            +
                update_lock(True)
         
     | 
| 
      
 455 
     | 
    
         
            +
             
     | 
| 
       450 
456 
     | 
    
         
             
                if rename_vtp:
         
     | 
| 
       451 
457 
     | 
    
         
             
                    if debug:
         
     | 
| 
       452 
458 
     | 
    
         
             
                        print(f"Moving '{vtp}' to '{temp_vtp}'...")
         
     | 
| 
       453 
459 
     | 
    
         
             
                    shutil.move(vtp, temp_vtp)
         
     | 
| 
       454 
460 
     | 
    
         | 
| 
       455 
     | 
    
         
            -
                 
     | 
| 
       456 
     | 
    
         
            -
             
     | 
| 
      
 461 
     | 
    
         
            +
                if venv_path.exists():
         
     | 
| 
      
 462 
     | 
    
         
            +
                    if debug:
         
     | 
| 
      
 463 
     | 
    
         
            +
                        print(f"Removing '{venv_path}'...")
         
     | 
| 
      
 464 
     | 
    
         
            +
                    try:
         
     | 
| 
      
 465 
     | 
    
         
            +
                        shutil.rmtree(venv_path)
         
     | 
| 
      
 466 
     | 
    
         
            +
                    except Exception as e:
         
     | 
| 
      
 467 
     | 
    
         
            +
                        if debug:
         
     | 
| 
      
 468 
     | 
    
         
            +
                            print(f"Failed to remove '{venv_path}' ({e}). Continuing...")
         
     | 
| 
       457 
469 
     | 
    
         | 
| 
       458 
470 
     | 
    
         
             
                if uv is not None:
         
     | 
| 
       459 
471 
     | 
    
         
             
                    _venv_success = run_python_package(
         
     | 
| 
         @@ -663,10 +675,10 @@ def venv_exists(venv: Union[str, None], debug: bool = False) -> bool: 
     | 
|
| 
       663 
675 
     | 
    
         | 
| 
       664 
676 
     | 
    
         | 
| 
       665 
677 
     | 
    
         
             
            def venv_target_path(
         
     | 
| 
       666 
     | 
    
         
            -
             
     | 
| 
       667 
     | 
    
         
            -
             
     | 
| 
       668 
     | 
    
         
            -
             
     | 
| 
       669 
     | 
    
         
            -
             
     | 
| 
      
 678 
     | 
    
         
            +
                venv: Union[str, None],
         
     | 
| 
      
 679 
     | 
    
         
            +
                allow_nonexistent: bool = False,
         
     | 
| 
      
 680 
     | 
    
         
            +
                debug: bool = False,
         
     | 
| 
      
 681 
     | 
    
         
            +
            ) -> 'pathlib.Path':
         
     | 
| 
       670 
682 
     | 
    
         
             
                """
         
     | 
| 
       671 
683 
     | 
    
         
             
                Return a virtual environment's site-package path.
         
     | 
| 
       672 
684 
     | 
    
         | 
| 
         @@ -683,7 +695,11 @@ def venv_target_path( 
     | 
|
| 
       683 
695 
     | 
    
         
             
                The `pathlib.Path` object for the virtual environment's path.
         
     | 
| 
       684 
696 
     | 
    
         | 
| 
       685 
697 
     | 
    
         
             
                """
         
     | 
| 
       686 
     | 
    
         
            -
                import os 
     | 
| 
      
 698 
     | 
    
         
            +
                import os
         
     | 
| 
      
 699 
     | 
    
         
            +
                import sys
         
     | 
| 
      
 700 
     | 
    
         
            +
                import platform
         
     | 
| 
      
 701 
     | 
    
         
            +
                import pathlib
         
     | 
| 
      
 702 
     | 
    
         
            +
                import site
         
     | 
| 
       687 
703 
     | 
    
         
             
                from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
         
     | 
| 
       688 
704 
     | 
    
         
             
                from meerschaum.config.static import STATIC_CONFIG
         
     | 
| 
       689 
705 
     | 
    
         | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Metadata-Version: 2.1
         
     | 
| 
       2 
2 
     | 
    
         
             
            Name: meerschaum
         
     | 
| 
       3 
     | 
    
         
            -
            Version: 2.7. 
     | 
| 
      
 3 
     | 
    
         
            +
            Version: 2.7.6
         
     | 
| 
       4 
4 
     | 
    
         
             
            Summary: Sync Time-Series Pipes with Meerschaum
         
     | 
| 
       5 
5 
     | 
    
         
             
            Home-page: https://meerschaum.io
         
     | 
| 
       6 
6 
     | 
    
         
             
            Author: Bennett Meares
         
     | 
| 
         @@ -127,7 +127,7 @@ Provides-Extra: sql 
     | 
|
| 
       127 
127 
     | 
    
         
             
            Requires-Dist: numpy>=1.18.5; extra == "sql"
         
     | 
| 
       128 
128 
     | 
    
         
             
            Requires-Dist: pandas[parquet]>=2.0.1; extra == "sql"
         
     | 
| 
       129 
129 
     | 
    
         
             
            Requires-Dist: pyarrow>=16.1.0; extra == "sql"
         
     | 
| 
       130 
     | 
    
         
            -
            Requires-Dist: dask[complete]>=2024. 
     | 
| 
      
 130 
     | 
    
         
            +
            Requires-Dist: dask[complete]>=2024.12.1; extra == "sql"
         
     | 
| 
       131 
131 
     | 
    
         
             
            Requires-Dist: partd>=1.4.2; extra == "sql"
         
     | 
| 
       132 
132 
     | 
    
         
             
            Requires-Dist: pytz; extra == "sql"
         
     | 
| 
       133 
133 
     | 
    
         
             
            Requires-Dist: joblib>=0.17.0; extra == "sql"
         
     | 
| 
         @@ -187,7 +187,7 @@ Requires-Dist: valkey>=6.0.0; extra == "api" 
     | 
|
| 
       187 
187 
     | 
    
         
             
            Requires-Dist: numpy>=1.18.5; extra == "api"
         
     | 
| 
       188 
188 
     | 
    
         
             
            Requires-Dist: pandas[parquet]>=2.0.1; extra == "api"
         
     | 
| 
       189 
189 
     | 
    
         
             
            Requires-Dist: pyarrow>=16.1.0; extra == "api"
         
     | 
| 
       190 
     | 
    
         
            -
            Requires-Dist: dask[complete]>=2024. 
     | 
| 
      
 190 
     | 
    
         
            +
            Requires-Dist: dask[complete]>=2024.12.1; extra == "api"
         
     | 
| 
       191 
191 
     | 
    
         
             
            Requires-Dist: partd>=1.4.2; extra == "api"
         
     | 
| 
       192 
192 
     | 
    
         
             
            Requires-Dist: pytz; extra == "api"
         
     | 
| 
       193 
193 
     | 
    
         
             
            Requires-Dist: joblib>=0.17.0; extra == "api"
         
     | 
| 
         @@ -292,7 +292,7 @@ Requires-Dist: pycparser>=2.21.0; extra == "full" 
     | 
|
| 
       292 
292 
     | 
    
         
             
            Requires-Dist: numpy>=1.18.5; extra == "full"
         
     | 
| 
       293 
293 
     | 
    
         
             
            Requires-Dist: pandas[parquet]>=2.0.1; extra == "full"
         
     | 
| 
       294 
294 
     | 
    
         
             
            Requires-Dist: pyarrow>=16.1.0; extra == "full"
         
     | 
| 
       295 
     | 
    
         
            -
            Requires-Dist: dask[complete]>=2024. 
     | 
| 
      
 295 
     | 
    
         
            +
            Requires-Dist: dask[complete]>=2024.12.1; extra == "full"
         
     | 
| 
       296 
296 
     | 
    
         
             
            Requires-Dist: partd>=1.4.2; extra == "full"
         
     | 
| 
       297 
297 
     | 
    
         
             
            Requires-Dist: pytz; extra == "full"
         
     | 
| 
       298 
298 
     | 
    
         
             
            Requires-Dist: joblib>=0.17.0; extra == "full"
         
     | 
| 
         @@ -12,8 +12,8 @@ meerschaum/_internal/gui/app/__init__.py,sha256=rKUa8hHk6Fai-PDF61tQcpT1myxKcfmv 
     | 
|
| 
       12 
12 
     | 
    
         
             
            meerschaum/_internal/gui/app/_windows.py,sha256=-VHdjTzA3V596fVqnbmTxemONSp_80-sTNJ0CTB8FwU,2632
         
     | 
| 
       13 
13 
     | 
    
         
             
            meerschaum/_internal/gui/app/actions.py,sha256=rx37qXf3uoa7Ou0n1cISqNFZNL0nr4wO7vSUmWO8f2E,935
         
     | 
| 
       14 
14 
     | 
    
         
             
            meerschaum/_internal/gui/app/pipes.py,sha256=4nAQ0rrHb_2bNgDF0Ru2YlbPaCDDzAl5beOGU4Af-4A,1596
         
     | 
| 
       15 
     | 
    
         
            -
            meerschaum/_internal/shell/Shell.py,sha256 
     | 
| 
       16 
     | 
    
         
            -
            meerschaum/_internal/shell/ShellCompleter.py,sha256= 
     | 
| 
      
 15 
     | 
    
         
            +
            meerschaum/_internal/shell/Shell.py,sha256=R6xW-D9gVuxJxQzf4Bf6E9V8exE40aCdrDJ_snUpoxA,39982
         
     | 
| 
      
 16 
     | 
    
         
            +
            meerschaum/_internal/shell/ShellCompleter.py,sha256=Ex6mPv83RUNdC3ufRJCcaoOmQ8q8z6tCHDVzXQmWIpY,3293
         
     | 
| 
       17 
17 
     | 
    
         
             
            meerschaum/_internal/shell/ValidAutoSuggest.py,sha256=bARjOWMidz0dvMelLUe6yRPto5l3gcEHYHqFDjoh22I,1280
         
     | 
| 
       18 
18 
     | 
    
         
             
            meerschaum/_internal/shell/__init__.py,sha256=vXQoQPEVlYiUYai1b5AwQAlTnja6A2cSABnqXhzlS7I,281
         
     | 
| 
       19 
19 
     | 
    
         
             
            meerschaum/_internal/shell/updates.py,sha256=FmKu1NsIE7AI1zq8zNeKneZzORv6BeURQeX0lRR81Ag,5040
         
     | 
| 
         @@ -25,8 +25,8 @@ meerschaum/actions/__init__.py,sha256=MHPs8aRBhbZQXnqd_6tVtisTrNCgPAPgnNcXYbn0zP 
     | 
|
| 
       25 
25 
     | 
    
         
             
            meerschaum/actions/api.py,sha256=41r3fBh3vAPyNaOrvbh2oh6WUJTR2I-zaOEZN60A66E,12538
         
     | 
| 
       26 
26 
     | 
    
         
             
            meerschaum/actions/attach.py,sha256=UV19d9W_2WYcrf7BRz7k3mriDoX1V4rA4AKvbLdor0o,3106
         
     | 
| 
       27 
27 
     | 
    
         
             
            meerschaum/actions/bootstrap.py,sha256=08o3PchrJ_Rv8IP30ZBH1Ovk-b8qFBGPedCjF7jRzSo,18084
         
     | 
| 
       28 
     | 
    
         
            -
            meerschaum/actions/clear.py,sha256= 
     | 
| 
       29 
     | 
    
         
            -
            meerschaum/actions/copy.py,sha256= 
     | 
| 
      
 28 
     | 
    
         
            +
            meerschaum/actions/clear.py,sha256=v_xHn7-Pu7iwFNJ07q9eJt2hqPV7OwNZHUYa9dvixs4,4976
         
     | 
| 
      
 29 
     | 
    
         
            +
            meerschaum/actions/copy.py,sha256=z_51zEQCKDXnAGfICIGKS3klZ2OTPdiZPJACvpuheDY,6861
         
     | 
| 
       30 
30 
     | 
    
         
             
            meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
         
     | 
| 
       31 
31 
     | 
    
         
             
            meerschaum/actions/delete.py,sha256=H5oP0nE7qIWnFvkuFhZQZQYBVC0IbUevpaQ_2YQKXRA,18559
         
     | 
| 
       32 
32 
     | 
    
         
             
            meerschaum/actions/drop.py,sha256=Hd5h4rrWd7qL2rTqglsTonUsEoH7qQlsfqNFSHGeqr0,2453
         
     | 
| 
         @@ -42,11 +42,11 @@ meerschaum/actions/restart.py,sha256=6ffp3-X9eTEgunVSdD41HnOwqp71yjuSAmXJ5j39ONI 
     | 
|
| 
       42 
42 
     | 
    
         
             
            meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
         
     | 
| 
       43 
43 
     | 
    
         
             
            meerschaum/actions/sh.py,sha256=hSkGNTVqP5dNjhJ64zy3V3VCFPTKnDlH3PxdKdxtkGQ,1990
         
     | 
| 
       44 
44 
     | 
    
         
             
            meerschaum/actions/show.py,sha256=T8Ol1o-762cI9rlUzd-8svvwgT4slYXYfOPQETh9Koo,28446
         
     | 
| 
       45 
     | 
    
         
            -
            meerschaum/actions/sql.py,sha256= 
     | 
| 
      
 45 
     | 
    
         
            +
            meerschaum/actions/sql.py,sha256=zG-KydYR654RHaF-O4Id3ACCDWeogk2B1R-OFLwFbG0,4515
         
     | 
| 
       46 
46 
     | 
    
         
             
            meerschaum/actions/stack.py,sha256=ZwrCTGJ0x3jjZkRieWcvqasQHYCqNtB1HYvTX-r3Z3g,5996
         
     | 
| 
       47 
47 
     | 
    
         
             
            meerschaum/actions/start.py,sha256=NtdVzeB00PQBnDSUSu8ypHmMrZT8_Idmw5BfVZ--Zic,21296
         
     | 
| 
       48 
48 
     | 
    
         
             
            meerschaum/actions/stop.py,sha256=5fdUw70YN-yuUWrC-NhA88cxr9FZ5NbssbQ8xXO8nFU,4632
         
     | 
| 
       49 
     | 
    
         
            -
            meerschaum/actions/sync.py,sha256= 
     | 
| 
      
 49 
     | 
    
         
            +
            meerschaum/actions/sync.py,sha256=br87b8uqpv7GW18f_O7Zg7QioPh0t377J082yfmuSak,17223
         
     | 
| 
       50 
50 
     | 
    
         
             
            meerschaum/actions/tag.py,sha256=SJf5qFW0ccLXjqlTdkK_0MCcrCMdg6xhYrhKdco0hdA,3053
         
     | 
| 
       51 
51 
     | 
    
         
             
            meerschaum/actions/uninstall.py,sha256=tBXhdXggSieGEQe4EPGxpgMK0MZTJCweNvAJ9-59El0,5776
         
     | 
| 
       52 
52 
     | 
    
         
             
            meerschaum/actions/upgrade.py,sha256=AjuC93Te-I_GWwIfuNkFJ2q1zVHDQ2Oco34S4JgK2iA,6485
         
     | 
| 
         @@ -62,7 +62,7 @@ meerschaum/api/dash/connectors.py,sha256=-Wd40ieYJI2nOASXi4V1C4bvLekjnN_tj6zp7Hg 
     | 
|
| 
       62 
62 
     | 
    
         
             
            meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
         
     | 
| 
       63 
63 
     | 
    
         
             
            meerschaum/api/dash/jobs.py,sha256=mj9STE6AaQY4fwkjD1JcYRG0iW3VEcP04bO1SlKgiXw,7681
         
     | 
| 
       64 
64 
     | 
    
         
             
            meerschaum/api/dash/keys.py,sha256=hzEVeN60SAfVTVSO5lajGaykxRIKGhj9Ph00HRJnNoE,12598
         
     | 
| 
       65 
     | 
    
         
            -
            meerschaum/api/dash/pipes.py,sha256= 
     | 
| 
      
 65 
     | 
    
         
            +
            meerschaum/api/dash/pipes.py,sha256=Zm2UKovwz6K8Mt6dTCY2LgDyUyFhEZ5D8nWw4ecPUXI,26210
         
     | 
| 
       66 
66 
     | 
    
         
             
            meerschaum/api/dash/plugins.py,sha256=KdfG04f6SsUpBg-nm7MUJegFGuElOj-GAkxDX98hi60,3768
         
     | 
| 
       67 
67 
     | 
    
         
             
            meerschaum/api/dash/sessions.py,sha256=-y5p4MYKh1eFzppkBfMsd6T7-rJs1nYS2-4fbVRAeRA,5029
         
     | 
| 
       68 
68 
     | 
    
         
             
            meerschaum/api/dash/sync.py,sha256=9lt7IRdG-fe9gf_ZO_viPiGlerX7ic6r_VFocv3I51A,504
         
     | 
| 
         @@ -132,7 +132,7 @@ meerschaum/api/routes/_webterm.py,sha256=MenDvWXnZ8CWEmryB46pKohMf0PN6o1xJGZ3LFj 
     | 
|
| 
       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
         
     | 
| 
       135 
     | 
    
         
            -
            meerschaum/config/_default.py,sha256= 
     | 
| 
      
 135 
     | 
    
         
            +
            meerschaum/config/_default.py,sha256=6SC7MOkU_2oJ7RtFXQCz9w1Qqg2_8w5UdOaR_HL3lzI,6009
         
     | 
| 
       136 
136 
     | 
    
         
             
            meerschaum/config/_edit.py,sha256=M9yX_SDD24gV5kWITZpy7p9AWTizJsIAGWAs3WZx-Ws,9087
         
     | 
| 
       137 
137 
     | 
    
         
             
            meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-wCrgo,4419
         
     | 
| 
       138 
138 
     | 
    
         
             
            meerschaum/config/_formatting.py,sha256=OMuqS1EWOsj_34wSs2tOqGIWci3bTMIZ5l-uelZgsIM,6672
         
     | 
| 
         @@ -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= 
     | 
| 
      
 146 
     | 
    
         
            +
            meerschaum/config/_version.py,sha256=EePnAdxzJgKO-MgeMY2aPKqoD0YcmJBjbRii3glP9Q4,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
         
     | 
| 
         @@ -162,23 +162,23 @@ meerschaum/connectors/api/_actions.py,sha256=gd3F8i5BvN8XRvMcPvPVR8sc1DeLzgoBHdD 
     | 
|
| 
       162 
162 
     | 
    
         
             
            meerschaum/connectors/api/_fetch.py,sha256=Khq9AFr1nk8Dsmcedb77aWhAuHw0JGgVeahDG95Q5MQ,2072
         
     | 
| 
       163 
163 
     | 
    
         
             
            meerschaum/connectors/api/_jobs.py,sha256=N5lpHFGG10jlVgaJeWAOTuLBQw3AdgjXsEPpp1YwZQE,11270
         
     | 
| 
       164 
164 
     | 
    
         
             
            meerschaum/connectors/api/_login.py,sha256=5GsD-B214vr5EYfM3XrTUs1sTFApxZA-9dNxq8oNSyg,2050
         
     | 
| 
       165 
     | 
    
         
            -
            meerschaum/connectors/api/_misc.py,sha256= 
     | 
| 
       166 
     | 
    
         
            -
            meerschaum/connectors/api/_pipes.py,sha256= 
     | 
| 
      
 165 
     | 
    
         
            +
            meerschaum/connectors/api/_misc.py,sha256=XK0LLexNUEKZjAAqoJ-9oOgwLlMdwxSOvcpqO5NuOas,1083
         
     | 
| 
      
 166 
     | 
    
         
            +
            meerschaum/connectors/api/_pipes.py,sha256=hk6Qj3tgog8naxl0Y2l6TfJsG4AZmel3bFIaLxuy0XY,21248
         
     | 
| 
       167 
167 
     | 
    
         
             
            meerschaum/connectors/api/_plugins.py,sha256=z04tPjfZZWwa7T60mogZH3X3wDmeLdnoN5Oh8m_YsU8,5217
         
     | 
| 
       168 
168 
     | 
    
         
             
            meerschaum/connectors/api/_request.py,sha256=Wc4Y70t0VxEj3_ch5fAeeoSAeFMuRnyNLOV-aUFInjY,6996
         
     | 
| 
       169 
169 
     | 
    
         
             
            meerschaum/connectors/api/_uri.py,sha256=HWxqGx4R1cHZ3ywy9Ro9ePbFxxusw4RLaC3hpGt9Z6I,1469
         
     | 
| 
       170 
170 
     | 
    
         
             
            meerschaum/connectors/api/_users.py,sha256=kzb7ENgXwQ19OJYKOuuWzx2rwVuUZCly9dTnyvVuT2Q,5275
         
     | 
| 
       171 
171 
     | 
    
         
             
            meerschaum/connectors/plugin/PluginConnector.py,sha256=aQ1QaB7MordCFimZqoGLb0R12PfDUN_nWks2J5mzeAs,2084
         
     | 
| 
       172 
172 
     | 
    
         
             
            meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPHgzOqsGcoXJw,198
         
     | 
| 
       173 
     | 
    
         
            -
            meerschaum/connectors/sql/_SQLConnector.py,sha256= 
     | 
| 
      
 173 
     | 
    
         
            +
            meerschaum/connectors/sql/_SQLConnector.py,sha256=uyGoCshgL-u6j3VbCDiBJn8LkVuveLeE62y8MWxSo24,12015
         
     | 
| 
       174 
174 
     | 
    
         
             
            meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
         
     | 
| 
       175 
     | 
    
         
            -
            meerschaum/connectors/sql/_cli.py,sha256= 
     | 
| 
       176 
     | 
    
         
            -
            meerschaum/connectors/sql/_create_engine.py,sha256= 
     | 
| 
      
 175 
     | 
    
         
            +
            meerschaum/connectors/sql/_cli.py,sha256=VqAHkdXC0HVXuHaZik2q-cTVmIsuS4DWMcPMJPP_g-Q,4514
         
     | 
| 
      
 176 
     | 
    
         
            +
            meerschaum/connectors/sql/_create_engine.py,sha256=RzJz4Qc43P4JS6tkgVvAhbdjEejIepWbxymIfVZ44Nk,10555
         
     | 
| 
       177 
177 
     | 
    
         
             
            meerschaum/connectors/sql/_fetch.py,sha256=GOU1JnPOBgaI3dDr0JdAmfTMPLIMM0EFHrsqDgDIO74,14070
         
     | 
| 
       178 
178 
     | 
    
         
             
            meerschaum/connectors/sql/_instance.py,sha256=mmZnodccuCqmZN-UnznnFZ7JodxtT47kwjDDaDKgwUg,6274
         
     | 
| 
       179 
     | 
    
         
            -
            meerschaum/connectors/sql/_pipes.py,sha256= 
     | 
| 
      
 179 
     | 
    
         
            +
            meerschaum/connectors/sql/_pipes.py,sha256=M0VQqkwd9sSyyttyKxonjoGi61guVc-oa1KiuWS7sd8,122315
         
     | 
| 
       180 
180 
     | 
    
         
             
            meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
         
     | 
| 
       181 
     | 
    
         
            -
            meerschaum/connectors/sql/_sql.py,sha256= 
     | 
| 
      
 181 
     | 
    
         
            +
            meerschaum/connectors/sql/_sql.py,sha256=brYLHJFt6BYlFYUhK--4okkll7UTkRR_PnvjjIJvXNY,41289
         
     | 
| 
       182 
182 
     | 
    
         
             
            meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
         
     | 
| 
       183 
183 
     | 
    
         
             
            meerschaum/connectors/sql/_users.py,sha256=FJjYeJGhr-TDHziNc6p_5mupGRtGjezKPIYgHFEVSnY,9956
         
     | 
| 
       184 
184 
     | 
    
         
             
            meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba9FT38,187
         
     | 
| 
         @@ -211,33 +211,33 @@ meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_u 
     | 
|
| 
       211 
211 
     | 
    
         
             
            meerschaum/core/User/_User.py,sha256=qbI0GIkr3G0PI4d9S49uatbJQ2kH_-z5-GoVJ0fuEtA,6624
         
     | 
| 
       212 
212 
     | 
    
         
             
            meerschaum/core/User/__init__.py,sha256=9qNy-Gobui4x6GiaE8U7-WOggsdniOM3_wegLN3SVKs,988
         
     | 
| 
       213 
213 
     | 
    
         
             
            meerschaum/jobs/_Executor.py,sha256=qM62BhFTM4tyJ7p90KOM0y3qyeRY9k3ZV_aTDJMHnO8,1682
         
     | 
| 
       214 
     | 
    
         
            -
            meerschaum/jobs/_Job.py,sha256= 
     | 
| 
      
 214 
     | 
    
         
            +
            meerschaum/jobs/_Job.py,sha256=m_OzHG1zdV3jBS1CS6idT-sc5XBx-sMz4CJZbWKeKqI,32217
         
     | 
| 
       215 
215 
     | 
    
         
             
            meerschaum/jobs/__init__.py,sha256=YjwB6t8HCT593ckrOlImgk0kLX-1NgAYzNXVwS-uvyY,12173
         
     | 
| 
       216 
216 
     | 
    
         
             
            meerschaum/jobs/systemd.py,sha256=Rq-tsDPslG17ZhpKMrVJ5r8Z0IPr6DEc9APObfIoXCg,24614
         
     | 
| 
       217 
217 
     | 
    
         
             
            meerschaum/plugins/_Plugin.py,sha256=bIo4HX8TTWIcwIHROwMt4VK6OoEUhY_3Qc8q-2dp-ZA,33895
         
     | 
| 
       218 
     | 
    
         
            -
            meerschaum/plugins/__init__.py,sha256= 
     | 
| 
      
 218 
     | 
    
         
            +
            meerschaum/plugins/__init__.py,sha256=Kl7Dz0CwUUxyjRC5RWnYo6WMLsOvdX2eQ38Rh3BjdzY,26465
         
     | 
| 
       219 
219 
     | 
    
         
             
            meerschaum/plugins/bootstrap.py,sha256=VwjpZAuYdqPJW0YoVgAoM_taHkdQHqP902-8T7OWWCI,11339
         
     | 
| 
       220 
220 
     | 
    
         
             
            meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
         
     | 
| 
       221 
221 
     | 
    
         
             
            meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
         
     | 
| 
       222 
222 
     | 
    
         
             
            meerschaum/utils/dataframe.py,sha256=fM8_DxnMTMhXDUqWIVXR-bOOwzBGO-cRcjarOIN3jdQ,47990
         
     | 
| 
       223 
223 
     | 
    
         
             
            meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
         
     | 
| 
       224 
224 
     | 
    
         
             
            meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
         
     | 
| 
       225 
     | 
    
         
            -
            meerschaum/utils/misc.py,sha256= 
     | 
| 
      
 225 
     | 
    
         
            +
            meerschaum/utils/misc.py,sha256=Ut__DxYXuu-WtF9Mg2Z1CrnQMBmhPuqGsjOgiZMhAww,47079
         
     | 
| 
       226 
226 
     | 
    
         
             
            meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
         
     | 
| 
       227 
227 
     | 
    
         
             
            meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
         
     | 
| 
       228 
228 
     | 
    
         
             
            meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
         
     | 
| 
       229 
     | 
    
         
            -
            meerschaum/utils/prompt.py,sha256= 
     | 
| 
      
 229 
     | 
    
         
            +
            meerschaum/utils/prompt.py,sha256=qbS8l0DfD6eRB9_RRbfkKLPs3m-Hw2zXSeQCf0TDJgU,19370
         
     | 
| 
       230 
230 
     | 
    
         
             
            meerschaum/utils/schedule.py,sha256=bUsaCO9CGn2vJO5UvoISScHDDGIiMdCPHxpTFmu7vwE,11531
         
     | 
| 
       231 
231 
     | 
    
         
             
            meerschaum/utils/sql.py,sha256=JqOfWCHWAlm1fr7mtZMquoGCOnPyIlX5LDshcRFDgdo,77993
         
     | 
| 
       232 
232 
     | 
    
         
             
            meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
         
     | 
| 
       233 
233 
     | 
    
         
             
            meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
         
     | 
| 
       234 
234 
     | 
    
         
             
            meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
         
     | 
| 
       235 
235 
     | 
    
         
             
            meerschaum/utils/yaml.py,sha256=PoC1du0pn2hLwTHwL-zuOf_EBWZSbCGOz-P-AZ4BWN0,3901
         
     | 
| 
       236 
     | 
    
         
            -
            meerschaum/utils/daemon/Daemon.py,sha256= 
     | 
| 
      
 236 
     | 
    
         
            +
            meerschaum/utils/daemon/Daemon.py,sha256=jNhzpkcR-kXgIQKBqr--cFx6ZhAb0a0sdjnCOUkLEL0,42885
         
     | 
| 
       237 
237 
     | 
    
         
             
            meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=MJKMO0Syf3d8yWUs6xXcQzg8Ptsuvh2aCRRoglOjusA,5257
         
     | 
| 
       238 
238 
     | 
    
         
             
            meerschaum/utils/daemon/RotatingFile.py,sha256=ePm_svjwyFDWh6V1k-bp1RHXCSWlyxDtlFu4SU4XvPU,24369
         
     | 
| 
       239 
239 
     | 
    
         
             
            meerschaum/utils/daemon/StdinFile.py,sha256=qdZ8E_RSOkURypwnS50mWeyWyRig1bAY9tKWMTVKajc,3307
         
     | 
| 
       240 
     | 
    
         
            -
            meerschaum/utils/daemon/__init__.py,sha256= 
     | 
| 
      
 240 
     | 
    
         
            +
            meerschaum/utils/daemon/__init__.py,sha256=ziRPyu_IM3l7Xd58y3Uvt0fZLoirJ9nuboFIxxult6c,8741
         
     | 
| 
       241 
241 
     | 
    
         
             
            meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
         
     | 
| 
       242 
242 
     | 
    
         
             
            meerschaum/utils/dtypes/__init__.py,sha256=c6DoYyCbWvMdRapBRKP5UJYLRUWtkTIlC_8HRzXFh2s,12166
         
     | 
| 
       243 
243 
     | 
    
         
             
            meerschaum/utils/dtypes/sql.py,sha256=Ew-ULDAJipzWpq_W-3fGGgTORhtoIqRZzZcS7k0L4B4,19582
         
     | 
| 
         @@ -246,16 +246,16 @@ meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pB 
     | 
|
| 
       246 
246 
     | 
    
         
             
            meerschaum/utils/formatting/_pipes.py,sha256=OISJmmFiilaDbZxkiXck_g39MnnTfk_fJJyJ-YInvXA,19559
         
     | 
| 
       247 
247 
     | 
    
         
             
            meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
         
     | 
| 
       248 
248 
     | 
    
         
             
            meerschaum/utils/formatting/_shell.py,sha256=XH7VFLteNv7NGtWhJl7FdIGt80sKeTiDoJokGSDAwBM,3761
         
     | 
| 
       249 
     | 
    
         
            -
            meerschaum/utils/packages/__init__.py,sha256= 
     | 
| 
       250 
     | 
    
         
            -
            meerschaum/utils/packages/_packages.py,sha256= 
     | 
| 
      
 249 
     | 
    
         
            +
            meerschaum/utils/packages/__init__.py,sha256=TdKaj2tmN4bFwzusOfMv24P5ET7Zv73vyoOf9GOIr5E,64427
         
     | 
| 
      
 250 
     | 
    
         
            +
            meerschaum/utils/packages/_packages.py,sha256=_xODMSz1FAcx3XHrn9RXUhGJ1zg-QKsVu9zYZV2UJeY,8868
         
     | 
| 
       251 
251 
     | 
    
         
             
            meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
         
     | 
| 
       252 
     | 
    
         
            -
            meerschaum/utils/venv/_Venv.py,sha256= 
     | 
| 
       253 
     | 
    
         
            -
            meerschaum/utils/venv/__init__.py,sha256= 
     | 
| 
       254 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       255 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       256 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       257 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       258 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       259 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       260 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
       261 
     | 
    
         
            -
            meerschaum-2.7. 
     | 
| 
      
 252 
     | 
    
         
            +
            meerschaum/utils/venv/_Venv.py,sha256=gc1TCeAj-kTZbQFAT9xl1bi4HXFV5ApT0dPOJfxwr78,3748
         
     | 
| 
      
 253 
     | 
    
         
            +
            meerschaum/utils/venv/__init__.py,sha256=vVU9vj7t-HTiRU--ReQZ9kRLesVqcHnSJDbmcfC-Dzg,27030
         
     | 
| 
      
 254 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
         
     | 
| 
      
 255 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/METADATA,sha256=fWChi6YW7sc_kNoXq7H3ryE-RdPH0fSR5UsFWQfMhps,24227
         
     | 
| 
      
 256 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
         
     | 
| 
      
 257 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
         
     | 
| 
      
 258 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
         
     | 
| 
      
 259 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
         
     | 
| 
      
 260 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
         
     | 
| 
      
 261 
     | 
    
         
            +
            meerschaum-2.7.6.dist-info/RECORD,,
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |