From 2266b591253b27ff08f6829d04c88fa994650459 Mon Sep 17 00:00:00 2001 From: Kamil Democko Date: Fri, 22 Mar 2024 14:06:13 +0100 Subject: [PATCH 1/3] new ShellTable, docs, typehings, docstrings, readme... --- docs/index.html | 7 - docs/pysapscript.html | 338 --- docs/pysapscript/index.html | 150 ++ docs/pysapscript/pysapscript.html | 1595 ++++++------ docs/pysapscript/shell_table.html | 1067 ++++++++ docs/pysapscript/types_.html | 238 -- docs/pysapscript/types_/exceptions.html | 515 ++-- docs/pysapscript/types_/index.html | 70 + docs/pysapscript/types_/types.html | 499 +--- docs/pysapscript/utils.html | 237 -- docs/pysapscript/utils/index.html | 65 + docs/pysapscript/utils/utils.html | 545 ++--- docs/pysapscript/window.html | 2947 ++++++++++------------- docs/search.js | 46 - poetry.lock | 522 ++-- pyproject.toml | 12 +- pysapscript/__init__.py | 4 +- pysapscript/pysapscript.py | 30 +- pysapscript/shell_table.py | 299 +++ pysapscript/window.py | 221 +- readme.md | 82 +- tests/manual_test.py | 13 +- tests/table_attached_test.py | 47 + 23 files changed, 4515 insertions(+), 5034 deletions(-) delete mode 100644 docs/index.html delete mode 100644 docs/pysapscript.html create mode 100644 docs/pysapscript/index.html create mode 100644 docs/pysapscript/shell_table.html delete mode 100644 docs/pysapscript/types_.html create mode 100644 docs/pysapscript/types_/index.html delete mode 100644 docs/pysapscript/utils.html create mode 100644 docs/pysapscript/utils/index.html delete mode 100644 docs/search.js create mode 100644 pysapscript/shell_table.py create mode 100644 tests/table_attached_test.py diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 3bd65fc..0000000 --- a/docs/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/pysapscript.html b/docs/pysapscript.html deleted file mode 100644 index ac0a2fa..0000000 --- a/docs/pysapscript.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - - pysapscript API documentation - - - - - - - - - -
-
-

-pysapscript

- -

Description

- -

SAP scripting for Python automatization

- -

Installation

- -
pip install pysapscript
-
- -

Usage

- -

Create pysapscript object

- -
-
pss = pysapscript.Sapscript()
-
-
- -

parameter default_window_title: = "SAP Easy Access"

- -

Launch Sap

- -
-
pss.launch_sap(
-    sid="SQ4",
-    client="012",
-    user="robot_t",
-    password=os.getenv("secret_password")
-)
-
-
- -

additional parameters:

- -
-
root_sap_dir = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui")
-maximise = True
-quit_auto = True
-
-
- -

Attach to window:

- -
-
window = pss.attach_window(0, 0)
-
-
- -

positional parameters (0, 0) -> (connection, session)

- -

Quitting SAP:

- -
    -
  • will automatically quit if not specified differently
  • -
  • manual quitting: pss.quit()
  • -
- -

Performing action:

- -
window.write(element, value)
-window.press(element)
-window.select(element)
-window.read(element)
-window.read_shell_table(element)
-window.press_shell_button(element, button_name)
-window.change_shell_checkbox(element, checkbox_name, boolean)
-
- -
    -
  • use SAP path wnd[0]..... for elements
  • -
- -

And another available actions...

- -
    -
  • close window, open new window, start transaction, navigate, maximize
  • -
-
- - - - - -
1"""
-2.. include:: ../README.md
-3"""
-4
-5from .pysapscript import Sapscript
-6from .window import Window
-7from .window import NavigateAction
-
- - -
-
- - \ No newline at end of file diff --git a/docs/pysapscript/index.html b/docs/pysapscript/index.html new file mode 100644 index 0000000..badfc00 --- /dev/null +++ b/docs/pysapscript/index.html @@ -0,0 +1,150 @@ + + + + + + +pysapscript API documentation + + + + + + + + + + + +
+
+
+

Package pysapscript

+
+
+

Description

+

SAP scripting for Python automatization

+

Documentation

+

Github - https://github.com/kamildemocko/PySapScript

+

Installation

+
pip install pysapscript
+
+

Usage

+

Create pysapscript object

+
pss = pysapscript.Sapscript()
+
+

parameter default_window_title: = "SAP Easy Access"

+

Launch Sap

+
pss.launch_sap(
+    sid="SQ4",
+    client="012",
+    user="robot_t",
+    password=os.getenv("secret_password")
+)
+
+

additional parameters:

+
root_sap_dir = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui")
+maximise = True
+quit_auto = True
+
+

Attach to window:

+
window = pss.attach_window(0, 0)
+
+

positional parameters (0, 0) -> (connection, session)

+

Quitting SAP:

+
    +
  • will automatically quit if not specified differently
  • +
  • manual quitting: pss.quit()
  • +
+

Performing action:

+

use SAP path starting with wnd[0] for element argumetns

+
window.write(element, value)
+window.press(element)
+window.select(element)
+window.read(element)
+window.read_shell_table(element)
+window.press_shell_button(element, button_name)
+window.change_shell_checkbox(element, checkbox_name, boolean)
+window.select_shell_rows(element, [0, 1, 2])
+html_content = window.read_html_viewer(element)
+
+

Another available actions…

+
    +
  • close window, open new window, start transaction, navigate, maximize
  • +
+
+ +Expand source code + +
"""
+.. include:: ../README.md
+"""
+
+
+
+

Sub-modules

+
+
pysapscript.pysapscript
+
+
+
+
pysapscript.shell_table
+
+
+
+
pysapscript.types_
+
+
+
+
pysapscript.utils
+
+
+
+
pysapscript.window
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/pysapscript/pysapscript.html b/docs/pysapscript/pysapscript.html index 0f8a920..13bac71 100644 --- a/docs/pysapscript/pysapscript.html +++ b/docs/pysapscript/pysapscript.html @@ -1,929 +1,690 @@ - - - - pysapscript.pysapscript API documentation - - - - - - - + + + +pysapscript.pysapscript API documentation + + + + + + + + + + - -
-
-

-pysapscript.pysapscript

- - - - - - -
  1import time
-  2import atexit
-  3from pathlib import Path
-  4from subprocess import Popen
-  5
-  6import win32com.client
-  7
-  8from pysapscript import window
-  9from pysapscript.utils import utils
- 10from pysapscript.types_ import exceptions
- 11
- 12
- 13class Sapscript:
- 14    def __init__(self, default_window_title: str = "SAP Easy Access"):
- 15        self._sap_gui_auto = None
- 16        self._application = None
- 17        self.default_window_title = default_window_title
- 18
- 19    def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), 
- 20                   sid: str, client: str, 
- 21                   user: str, password: str, 
- 22                   maximise: bool = True, quit_auto: bool = True):
- 23        """
- 24        Launches SAP and waits for it to load
- 25
- 26        Args:
- 27            root_sap_dir (pathlib.Path): SAP directory in the system
- 28            sid (str): SAP system ID
- 29            client (str): SAP client
- 30            user (str): SAP user
- 31            password (str): SAP password
- 32            maximise (bool): maximises window after start if True
- 33            quit_auto (bool): quits automatically on SAP exit if True
- 34
- 35        Raises:
- 36            WindowDidNotAppearException: No SAP window appeared
- 37
- 38        Example:
- 39            ```
- 40            pss.launch_sap(
- 41                sid="SQ4",
- 42                client="012",
- 43                user="robot_t",
- 44                password=os.getenv("secret")
- 45            )
- 46            ```
- 47        """
- 48
- 49        self._launch(
- 50            root_sap_dir, 
- 51            sid, 
- 52            client, 
- 53            user, 
- 54            password, 
- 55            maximise
- 56        )
- 57
- 58        time.sleep(5)
- 59        if quit_auto:
- 60            atexit.register(self.quit)
- 61
- 62    def quit(self):
- 63        """
- 64        Tries to close the sap normal way (from main window), then kills the process
- 65        """
- 66
- 67        try:
- 68            main_window = self.attach_window(0, 0)
- 69            main_window.select("wnd[0]/mbar/menu[4]/menu[12]")
- 70            main_window.press("wnd[1]/usr/btnSPOP-OPTION1")
- 71
- 72        finally:
- 73            utils.kill_process("saplogon.exe")
- 74
- 75    def attach_window(self, connection: int, session: int) -> window.Window:
- 76        """
- 77        Attaches window by connection and session number ID
- 78
- 79        Connection starts with 0 and is +1 for each client
- 80        Session start with 0 and is +1 for each new window opened
- 81
- 82        Args:
- 83            connection (int): connection number
- 84            session (int): session number
- 85
- 86        Returns:
- 87            window.Window: window attached
- 88
- 89        Raises:
- 90            AttributeError: srong connection or session
- 91            AttachException: could not attach to SAP window
- 92
- 93        Example:
- 94            ```
- 95            main_window = pss.attach_window(0, 0)
- 96            ```
- 97        """
- 98
- 99        if not isinstance(connection, int):
-100            raise AttributeError("Wrong connection argument!")
-101
-102        if not isinstance(session, int):
-103            raise AttributeError("Wrong session argument!")
-104
-105        if not isinstance(self._sap_gui_auto, win32com.client.CDispatch):
-106            self._sap_gui_auto = win32com.client.GetObject("SAPGUI")
-107
-108        if not isinstance(self._application, win32com.client.CDispatch):
-109            self._application = self._sap_gui_auto.GetScriptingEngine
-110
-111        try:
-112            connection_handle = self._application.Children(connection)
-113
-114        except Exception:
-115            raise exceptions.AttachException("Could not attach connection %s!" % connection)
-116
-117        try:
-118            session_handle = connection_handle.Children(session)
-119
-120        except Exception:
-121            raise exceptions.AttachException("Could not attach session %s!" % session)
-122
-123        return window.Window(
-124            connection=connection,
-125            connection_handle=connection_handle,
-126            session=session,
-127            session_handle=session_handle,
-128        )
-129
-130    def open_new_window(self, window_to_handle_opening: window.Window):
-131        """
-132        Opens new sap window
-133
-134        SAP must be already launched and window that is not busy must be available
-135        Warning, as of now, this method will not wait for window to appear if any
-136        other window is opened and has the default windows title
-137
-138        Args:
-139            window_to_handle_opening: idle SAP window that will be used to open new window
-140
-141        Raises:
-142            WindowDidNotAppearException: no SAP window appeared
-143
-144        Example:
-145            ```
-146            main_window = pss.attach_window(0, 0)
-147            pss.open_new_window(main_window)
-148            ```
-149        """
-150
-151        window_to_handle_opening.session_handle.createSession()
-152
-153        utils.wait_for_window_title(self.default_window_title)
-154
-155    def _launch(self, working_dir: Path, sid: str, client: str, 
-156                user: str, password: str, maximise: bool):
-157        """
-158        launches sap from sapshcut.exe
-159        """
-160
-161        working_dir = working_dir.resolve()
-162        sap_executable = working_dir.joinpath("sapshcut.exe")
-163
-164        maximise_sap = "-max" if maximise else ""
-165        command = f"-system={sid} -client={client} "\
-166            f"-user={user} -pw={password} {maximise_sap}"
-167
-168        tryouts = 2
-169        while tryouts > 0:
-170            try:
-171                Popen([sap_executable, *command.split(" ")])
-172
-173                utils.wait_for_window_title(self.default_window_title)
-174                break
-175
-176            except exceptions.WindowDidNotAppearException:
-177                tryouts = tryouts - 1
-178                utils.kill_process("saplogon.exe")
-179
-180        else:
-181            raise exceptions.WindowDidNotAppearException(
-182                "Failed to launch SAP - Mindow did not appear."
-183            )
-
- - -
-
- -
- - class - Sapscript: - - - -
- -
 14class Sapscript:
- 15    def __init__(self, default_window_title: str = "SAP Easy Access"):
- 16        self._sap_gui_auto = None
- 17        self._application = None
- 18        self.default_window_title = default_window_title
- 19
- 20    def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), 
- 21                   sid: str, client: str, 
- 22                   user: str, password: str, 
- 23                   maximise: bool = True, quit_auto: bool = True):
- 24        """
- 25        Launches SAP and waits for it to load
- 26
- 27        Args:
- 28            root_sap_dir (pathlib.Path): SAP directory in the system
- 29            sid (str): SAP system ID
- 30            client (str): SAP client
- 31            user (str): SAP user
- 32            password (str): SAP password
- 33            maximise (bool): maximises window after start if True
- 34            quit_auto (bool): quits automatically on SAP exit if True
- 35
- 36        Raises:
- 37            WindowDidNotAppearException: No SAP window appeared
- 38
- 39        Example:
- 40            ```
- 41            pss.launch_sap(
- 42                sid="SQ4",
- 43                client="012",
- 44                user="robot_t",
- 45                password=os.getenv("secret")
- 46            )
- 47            ```
- 48        """
- 49
- 50        self._launch(
- 51            root_sap_dir, 
- 52            sid, 
- 53            client, 
- 54            user, 
- 55            password, 
- 56            maximise
- 57        )
- 58
- 59        time.sleep(5)
- 60        if quit_auto:
- 61            atexit.register(self.quit)
- 62
- 63    def quit(self):
- 64        """
- 65        Tries to close the sap normal way (from main window), then kills the process
- 66        """
- 67
- 68        try:
- 69            main_window = self.attach_window(0, 0)
- 70            main_window.select("wnd[0]/mbar/menu[4]/menu[12]")
- 71            main_window.press("wnd[1]/usr/btnSPOP-OPTION1")
- 72
- 73        finally:
- 74            utils.kill_process("saplogon.exe")
- 75
- 76    def attach_window(self, connection: int, session: int) -> window.Window:
- 77        """
- 78        Attaches window by connection and session number ID
- 79
- 80        Connection starts with 0 and is +1 for each client
- 81        Session start with 0 and is +1 for each new window opened
- 82
- 83        Args:
- 84            connection (int): connection number
- 85            session (int): session number
- 86
- 87        Returns:
- 88            window.Window: window attached
- 89
- 90        Raises:
- 91            AttributeError: srong connection or session
- 92            AttachException: could not attach to SAP window
- 93
- 94        Example:
- 95            ```
- 96            main_window = pss.attach_window(0, 0)
- 97            ```
- 98        """
- 99
-100        if not isinstance(connection, int):
-101            raise AttributeError("Wrong connection argument!")
-102
-103        if not isinstance(session, int):
-104            raise AttributeError("Wrong session argument!")
-105
-106        if not isinstance(self._sap_gui_auto, win32com.client.CDispatch):
-107            self._sap_gui_auto = win32com.client.GetObject("SAPGUI")
-108
-109        if not isinstance(self._application, win32com.client.CDispatch):
-110            self._application = self._sap_gui_auto.GetScriptingEngine
-111
-112        try:
-113            connection_handle = self._application.Children(connection)
-114
-115        except Exception:
-116            raise exceptions.AttachException("Could not attach connection %s!" % connection)
-117
-118        try:
-119            session_handle = connection_handle.Children(session)
-120
-121        except Exception:
-122            raise exceptions.AttachException("Could not attach session %s!" % session)
-123
-124        return window.Window(
-125            connection=connection,
-126            connection_handle=connection_handle,
-127            session=session,
-128            session_handle=session_handle,
-129        )
-130
-131    def open_new_window(self, window_to_handle_opening: window.Window):
-132        """
-133        Opens new sap window
-134
-135        SAP must be already launched and window that is not busy must be available
-136        Warning, as of now, this method will not wait for window to appear if any
-137        other window is opened and has the default windows title
-138
-139        Args:
-140            window_to_handle_opening: idle SAP window that will be used to open new window
-141
-142        Raises:
-143            WindowDidNotAppearException: no SAP window appeared
-144
-145        Example:
-146            ```
-147            main_window = pss.attach_window(0, 0)
-148            pss.open_new_window(main_window)
-149            ```
-150        """
-151
-152        window_to_handle_opening.session_handle.createSession()
-153
-154        utils.wait_for_window_title(self.default_window_title)
-155
-156    def _launch(self, working_dir: Path, sid: str, client: str, 
-157                user: str, password: str, maximise: bool):
-158        """
-159        launches sap from sapshcut.exe
-160        """
-161
-162        working_dir = working_dir.resolve()
-163        sap_executable = working_dir.joinpath("sapshcut.exe")
-164
-165        maximise_sap = "-max" if maximise else ""
-166        command = f"-system={sid} -client={client} "\
-167            f"-user={user} -pw={password} {maximise_sap}"
-168
-169        tryouts = 2
-170        while tryouts > 0:
-171            try:
-172                Popen([sap_executable, *command.split(" ")])
-173
-174                utils.wait_for_window_title(self.default_window_title)
-175                break
-176
-177            except exceptions.WindowDidNotAppearException:
-178                tryouts = tryouts - 1
-179                utils.kill_process("saplogon.exe")
-180
-181        else:
-182            raise exceptions.WindowDidNotAppearException(
-183                "Failed to launch SAP - Mindow did not appear."
-184            )
-
- - - - -
- -
- - Sapscript(default_window_title: str = 'SAP Easy Access') - - - -
- -
15    def __init__(self, default_window_title: str = "SAP Easy Access"):
-16        self._sap_gui_auto = None
-17        self._application = None
-18        self.default_window_title = default_window_title
-
- - - - -
-
-
- default_window_title - - -
- - - - -
-
- -
- - def - launch_sap( self, *, root_sap_dir: pathlib.Path = WindowsPath('C:/Program Files (x86)/SAP/FrontEnd/SAPgui'), sid: str, client: str, user: str, password: str, maximise: bool = True, quit_auto: bool = True): - - - -
- -
20    def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), 
-21                   sid: str, client: str, 
-22                   user: str, password: str, 
-23                   maximise: bool = True, quit_auto: bool = True):
-24        """
-25        Launches SAP and waits for it to load
-26
-27        Args:
-28            root_sap_dir (pathlib.Path): SAP directory in the system
-29            sid (str): SAP system ID
-30            client (str): SAP client
-31            user (str): SAP user
-32            password (str): SAP password
-33            maximise (bool): maximises window after start if True
-34            quit_auto (bool): quits automatically on SAP exit if True
-35
-36        Raises:
-37            WindowDidNotAppearException: No SAP window appeared
-38
-39        Example:
-40            ```
-41            pss.launch_sap(
-42                sid="SQ4",
-43                client="012",
-44                user="robot_t",
-45                password=os.getenv("secret")
-46            )
-47            ```
-48        """
-49
-50        self._launch(
-51            root_sap_dir, 
-52            sid, 
-53            client, 
-54            user, 
-55            password, 
-56            maximise
-57        )
-58
-59        time.sleep(5)
-60        if quit_auto:
-61            atexit.register(self.quit)
-
- - -

Launches SAP and waits for it to load

- -

Args: - root_sap_dir (pathlib.Path): SAP directory in the system - sid (str): SAP system ID - client (str): SAP client - user (str): SAP user - password (str): SAP password - maximise (bool): maximises window after start if True - quit_auto (bool): quits automatically on SAP exit if True

- -

Raises: - WindowDidNotAppearException: No SAP window appeared

- -

Example: -

pss.launch_sap(
-    sid="SQ4",
-    client="012",
-    user="robot_t",
-    password=os.getenv("secret")
-)
-

-
- - -
-
- -
- - def - quit(self): - - - -
- -
63    def quit(self):
-64        """
-65        Tries to close the sap normal way (from main window), then kills the process
-66        """
-67
-68        try:
-69            main_window = self.attach_window(0, 0)
-70            main_window.select("wnd[0]/mbar/menu[4]/menu[12]")
-71            main_window.press("wnd[1]/usr/btnSPOP-OPTION1")
-72
-73        finally:
-74            utils.kill_process("saplogon.exe")
-
- - -

Tries to close the sap normal way (from main window), then kills the process

-
- - -
-
- -
- - def - attach_window(self, connection: int, session: int) -> pysapscript.window.Window: - - - -
- -
 76    def attach_window(self, connection: int, session: int) -> window.Window:
- 77        """
- 78        Attaches window by connection and session number ID
- 79
- 80        Connection starts with 0 and is +1 for each client
- 81        Session start with 0 and is +1 for each new window opened
- 82
- 83        Args:
- 84            connection (int): connection number
- 85            session (int): session number
- 86
- 87        Returns:
- 88            window.Window: window attached
- 89
- 90        Raises:
- 91            AttributeError: srong connection or session
- 92            AttachException: could not attach to SAP window
- 93
- 94        Example:
- 95            ```
- 96            main_window = pss.attach_window(0, 0)
- 97            ```
- 98        """
- 99
-100        if not isinstance(connection, int):
-101            raise AttributeError("Wrong connection argument!")
-102
-103        if not isinstance(session, int):
-104            raise AttributeError("Wrong session argument!")
-105
-106        if not isinstance(self._sap_gui_auto, win32com.client.CDispatch):
-107            self._sap_gui_auto = win32com.client.GetObject("SAPGUI")
-108
-109        if not isinstance(self._application, win32com.client.CDispatch):
-110            self._application = self._sap_gui_auto.GetScriptingEngine
-111
-112        try:
-113            connection_handle = self._application.Children(connection)
-114
-115        except Exception:
-116            raise exceptions.AttachException("Could not attach connection %s!" % connection)
-117
-118        try:
-119            session_handle = connection_handle.Children(session)
-120
-121        except Exception:
-122            raise exceptions.AttachException("Could not attach session %s!" % session)
-123
-124        return window.Window(
-125            connection=connection,
-126            connection_handle=connection_handle,
-127            session=session,
-128            session_handle=session_handle,
-129        )
-
- - -

Attaches window by connection and session number ID

- +
+
+
+

Module pysapscript.pysapscript

+
+
+
+ +Expand source code + +
import time
+import atexit
+from pathlib import Path
+from subprocess import Popen
+
+import win32com.client
+
+from pysapscript import window
+from pysapscript.utils import utils
+from pysapscript.types_ import exceptions
+
+
+class Sapscript:
+    def __init__(self, default_window_title: str = "SAP Easy Access") -> None:
+        self._sap_gui_auto = None
+        self._application = None
+        self.default_window_title = default_window_title
+
+    def __repr__(self) -> str:
+        return f"Sapscript(default_window_title={self.default_window_title})"
+
+    def __str__(self) -> str:
+        return f"Sapscript(default_window_title={self.default_window_title})"
+
+    def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), 
+                   sid: str, client: str, 
+                   user: str, password: str, 
+                   maximise: bool = True, quit_auto: bool = True) -> None:
+        """
+        Launches SAP and waits for it to load
+
+        Args:
+            root_sap_dir (pathlib.Path): SAP directory in the system
+            sid (str): SAP system ID
+            client (str): SAP client
+            user (str): SAP user
+            password (str): SAP password
+            maximise (bool): maximises window after start if True
+            quit_auto (bool): quits automatically on SAP exit if True
+
+        Raises:
+            WindowDidNotAppearException: No SAP window appeared
+
+        Example:
+            ```
+            pss.launch_sap(
+                sid="SQ4",
+                client="012",
+                user="robot_t",
+                password=os.getenv("secret")
+            )
+            ```
+        """
+        self._launch(
+            root_sap_dir, 
+            sid, 
+            client, 
+            user, 
+            password, 
+            maximise
+        )
+
+        time.sleep(5)
+        if quit_auto:
+            atexit.register(self.quit)
+
+    def quit(self) -> None:
+        """
+        Tries to close the sap normal way (from main window), then kills the process
+        """
+        try:
+            main_window = self.attach_window(0, 0)
+            main_window.select("wnd[0]/mbar/menu[4]/menu[12]")
+            main_window.press("wnd[1]/usr/btnSPOP-OPTION1")
+
+        finally:
+            utils.kill_process("saplogon.exe")
+
+    def attach_window(self, connection: int, session: int) -> window.Window:
+        """
+        Attaches window by connection and session number ID
+
+        Connection starts with 0 and is +1 for each client
+        Session start with 0 and is +1 for each new window opened
+
+        Args:
+            connection (int): connection number
+            session (int): session number
+
+        Returns:
+            window.Window: window attached
+
+        Raises:
+            AttributeError: srong connection or session
+            AttachException: could not attach to SAP window
+
+        Example:
+            ```
+            main_window = pss.attach_window(0, 0)
+            ```
+        """
+        if not isinstance(connection, int):
+            raise AttributeError("Wrong connection argument!")
+
+        if not isinstance(session, int):
+            raise AttributeError("Wrong session argument!")
+
+        if not isinstance(self._sap_gui_auto, win32com.client.CDispatch):
+            self._sap_gui_auto = win32com.client.GetObject("SAPGUI")
+
+        if not isinstance(self._application, win32com.client.CDispatch):
+            self._application = self._sap_gui_auto.GetScriptingEngine
+
+        try:
+            connection_handle = self._application.Children(connection)
+
+        except Exception:
+            raise exceptions.AttachException("Could not attach connection %s!" % connection)
+
+        try:
+            session_handle = connection_handle.Children(session)
+
+        except Exception:
+            raise exceptions.AttachException("Could not attach session %s!" % session)
+
+        return window.Window(
+            connection=connection,
+            connection_handle=connection_handle,
+            session=session,
+            session_handle=session_handle,
+        )
+
+    def open_new_window(self, window_to_handle_opening: window.Window) -> None:
+        """
+        Opens new sap window
+
+        SAP must be already launched and window that is not busy must be available
+        Warning, as of now, this method will not wait for window to appear if any
+        other window is opened and has the default windows title
+
+        Args:
+            window_to_handle_opening: idle SAP window that will be used to open new window
+
+        Raises:
+            WindowDidNotAppearException: no SAP window appeared
+
+        Example:
+            ```
+            main_window = pss.attach_window(0, 0)
+            pss.open_new_window(main_window)
+            ```
+        """
+        window_to_handle_opening.session_handle.createSession()
+
+        utils.wait_for_window_title(self.default_window_title)
+
+    def _launch(self, working_dir: Path, sid: str, client: str, 
+                user: str, password: str, maximise: bool) -> None:
+        """
+        launches sap from sapshcut.exe
+        """
+
+        working_dir = working_dir.resolve()
+        sap_executable = working_dir.joinpath("sapshcut.exe")
+
+        maximise_sap = "-max" if maximise else ""
+        command = f"-system={sid} -client={client} "\
+            f"-user={user} -pw={password} {maximise_sap}"
+
+        tryouts = 2
+        while tryouts > 0:
+            try:
+                Popen([sap_executable, *command.split(" ")])
+
+                utils.wait_for_window_title(self.default_window_title)
+                break
+
+            except exceptions.WindowDidNotAppearException:
+                tryouts = tryouts - 1
+                utils.kill_process("saplogon.exe")
+
+        else:
+            raise exceptions.WindowDidNotAppearException(
+                "Failed to launch SAP - Mindow did not appear."
+            )
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class Sapscript +(default_window_title: str = 'SAP Easy Access') +
+
+
+
+ +Expand source code + +
class Sapscript:
+    def __init__(self, default_window_title: str = "SAP Easy Access") -> None:
+        self._sap_gui_auto = None
+        self._application = None
+        self.default_window_title = default_window_title
+
+    def __repr__(self) -> str:
+        return f"Sapscript(default_window_title={self.default_window_title})"
+
+    def __str__(self) -> str:
+        return f"Sapscript(default_window_title={self.default_window_title})"
+
+    def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), 
+                   sid: str, client: str, 
+                   user: str, password: str, 
+                   maximise: bool = True, quit_auto: bool = True) -> None:
+        """
+        Launches SAP and waits for it to load
+
+        Args:
+            root_sap_dir (pathlib.Path): SAP directory in the system
+            sid (str): SAP system ID
+            client (str): SAP client
+            user (str): SAP user
+            password (str): SAP password
+            maximise (bool): maximises window after start if True
+            quit_auto (bool): quits automatically on SAP exit if True
+
+        Raises:
+            WindowDidNotAppearException: No SAP window appeared
+
+        Example:
+            ```
+            pss.launch_sap(
+                sid="SQ4",
+                client="012",
+                user="robot_t",
+                password=os.getenv("secret")
+            )
+            ```
+        """
+        self._launch(
+            root_sap_dir, 
+            sid, 
+            client, 
+            user, 
+            password, 
+            maximise
+        )
+
+        time.sleep(5)
+        if quit_auto:
+            atexit.register(self.quit)
+
+    def quit(self) -> None:
+        """
+        Tries to close the sap normal way (from main window), then kills the process
+        """
+        try:
+            main_window = self.attach_window(0, 0)
+            main_window.select("wnd[0]/mbar/menu[4]/menu[12]")
+            main_window.press("wnd[1]/usr/btnSPOP-OPTION1")
+
+        finally:
+            utils.kill_process("saplogon.exe")
+
+    def attach_window(self, connection: int, session: int) -> window.Window:
+        """
+        Attaches window by connection and session number ID
+
+        Connection starts with 0 and is +1 for each client
+        Session start with 0 and is +1 for each new window opened
+
+        Args:
+            connection (int): connection number
+            session (int): session number
+
+        Returns:
+            window.Window: window attached
+
+        Raises:
+            AttributeError: srong connection or session
+            AttachException: could not attach to SAP window
+
+        Example:
+            ```
+            main_window = pss.attach_window(0, 0)
+            ```
+        """
+        if not isinstance(connection, int):
+            raise AttributeError("Wrong connection argument!")
+
+        if not isinstance(session, int):
+            raise AttributeError("Wrong session argument!")
+
+        if not isinstance(self._sap_gui_auto, win32com.client.CDispatch):
+            self._sap_gui_auto = win32com.client.GetObject("SAPGUI")
+
+        if not isinstance(self._application, win32com.client.CDispatch):
+            self._application = self._sap_gui_auto.GetScriptingEngine
+
+        try:
+            connection_handle = self._application.Children(connection)
+
+        except Exception:
+            raise exceptions.AttachException("Could not attach connection %s!" % connection)
+
+        try:
+            session_handle = connection_handle.Children(session)
+
+        except Exception:
+            raise exceptions.AttachException("Could not attach session %s!" % session)
+
+        return window.Window(
+            connection=connection,
+            connection_handle=connection_handle,
+            session=session,
+            session_handle=session_handle,
+        )
+
+    def open_new_window(self, window_to_handle_opening: window.Window) -> None:
+        """
+        Opens new sap window
+
+        SAP must be already launched and window that is not busy must be available
+        Warning, as of now, this method will not wait for window to appear if any
+        other window is opened and has the default windows title
+
+        Args:
+            window_to_handle_opening: idle SAP window that will be used to open new window
+
+        Raises:
+            WindowDidNotAppearException: no SAP window appeared
+
+        Example:
+            ```
+            main_window = pss.attach_window(0, 0)
+            pss.open_new_window(main_window)
+            ```
+        """
+        window_to_handle_opening.session_handle.createSession()
+
+        utils.wait_for_window_title(self.default_window_title)
+
+    def _launch(self, working_dir: Path, sid: str, client: str, 
+                user: str, password: str, maximise: bool) -> None:
+        """
+        launches sap from sapshcut.exe
+        """
+
+        working_dir = working_dir.resolve()
+        sap_executable = working_dir.joinpath("sapshcut.exe")
+
+        maximise_sap = "-max" if maximise else ""
+        command = f"-system={sid} -client={client} "\
+            f"-user={user} -pw={password} {maximise_sap}"
+
+        tryouts = 2
+        while tryouts > 0:
+            try:
+                Popen([sap_executable, *command.split(" ")])
+
+                utils.wait_for_window_title(self.default_window_title)
+                break
+
+            except exceptions.WindowDidNotAppearException:
+                tryouts = tryouts - 1
+                utils.kill_process("saplogon.exe")
+
+        else:
+            raise exceptions.WindowDidNotAppearException(
+                "Failed to launch SAP - Mindow did not appear."
+            )
+
+

Methods

+
+
+def attach_window(self, connection: int, session: int) ‑> Window +
+
+

Attaches window by connection and session number ID

Connection starts with 0 and is +1 for each client Session start with 0 and is +1 for each new window opened

- -

Args: - connection (int): connection number - session (int): session number

- -

Returns: - window.Window: window attached

- -

Raises: - AttributeError: srong connection or session - AttachException: could not attach to SAP window

- -

Example: -

main_window = pss.attach_window(0, 0)
-

-
- - -
-
- -
- - def - open_new_window(self, window_to_handle_opening: pysapscript.window.Window): - - - -
- -
131    def open_new_window(self, window_to_handle_opening: window.Window):
-132        """
-133        Opens new sap window
-134
-135        SAP must be already launched and window that is not busy must be available
-136        Warning, as of now, this method will not wait for window to appear if any
-137        other window is opened and has the default windows title
-138
-139        Args:
-140            window_to_handle_opening: idle SAP window that will be used to open new window
-141
-142        Raises:
-143            WindowDidNotAppearException: no SAP window appeared
-144
-145        Example:
-146            ```
-147            main_window = pss.attach_window(0, 0)
-148            pss.open_new_window(main_window)
-149            ```
-150        """
-151
-152        window_to_handle_opening.session_handle.createSession()
-153
-154        utils.wait_for_window_title(self.default_window_title)
-
- - -

Opens new sap window

- +

Args

+
+
connection : int
+
connection number
+
session : int
+
session number
+
+

Returns

+
+
window.Window
+
window attached
+
+

Raises

+
+
AttributeError
+
srong connection or session
+
AttachException
+
could not attach to SAP window
+
+

Example

+
main_window = pss.attach_window(0, 0)
+
+
+ +Expand source code + +
def attach_window(self, connection: int, session: int) -> window.Window:
+    """
+    Attaches window by connection and session number ID
+
+    Connection starts with 0 and is +1 for each client
+    Session start with 0 and is +1 for each new window opened
+
+    Args:
+        connection (int): connection number
+        session (int): session number
+
+    Returns:
+        window.Window: window attached
+
+    Raises:
+        AttributeError: srong connection or session
+        AttachException: could not attach to SAP window
+
+    Example:
+        ```
+        main_window = pss.attach_window(0, 0)
+        ```
+    """
+    if not isinstance(connection, int):
+        raise AttributeError("Wrong connection argument!")
+
+    if not isinstance(session, int):
+        raise AttributeError("Wrong session argument!")
+
+    if not isinstance(self._sap_gui_auto, win32com.client.CDispatch):
+        self._sap_gui_auto = win32com.client.GetObject("SAPGUI")
+
+    if not isinstance(self._application, win32com.client.CDispatch):
+        self._application = self._sap_gui_auto.GetScriptingEngine
+
+    try:
+        connection_handle = self._application.Children(connection)
+
+    except Exception:
+        raise exceptions.AttachException("Could not attach connection %s!" % connection)
+
+    try:
+        session_handle = connection_handle.Children(session)
+
+    except Exception:
+        raise exceptions.AttachException("Could not attach session %s!" % session)
+
+    return window.Window(
+        connection=connection,
+        connection_handle=connection_handle,
+        session=session,
+        session_handle=session_handle,
+    )
+
+ +
+def launch_sap(self, *, root_sap_dir: pathlib.Path = WindowsPath('C:/Program Files (x86)/SAP/FrontEnd/SAPgui'), sid: str, client: str, user: str, password: str, maximise: bool = True, quit_auto: bool = True) ‑> None +
+
+

Launches SAP and waits for it to load

+

Args

+
+
root_sap_dir : pathlib.Path
+
SAP directory in the system
+
sid : str
+
SAP system ID
+
client : str
+
SAP client
+
user : str
+
SAP user
+
password : str
+
SAP password
+
maximise : bool
+
maximises window after start if True
+
quit_auto : bool
+
quits automatically on SAP exit if True
+
+

Raises

+
+
WindowDidNotAppearException
+
No SAP window appeared
+
+

Example

+
pss.launch_sap(
+    sid="SQ4",
+    client="012",
+    user="robot_t",
+    password=os.getenv("secret")
+)
+
+
+ +Expand source code + +
def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), 
+               sid: str, client: str, 
+               user: str, password: str, 
+               maximise: bool = True, quit_auto: bool = True) -> None:
+    """
+    Launches SAP and waits for it to load
+
+    Args:
+        root_sap_dir (pathlib.Path): SAP directory in the system
+        sid (str): SAP system ID
+        client (str): SAP client
+        user (str): SAP user
+        password (str): SAP password
+        maximise (bool): maximises window after start if True
+        quit_auto (bool): quits automatically on SAP exit if True
+
+    Raises:
+        WindowDidNotAppearException: No SAP window appeared
+
+    Example:
+        ```
+        pss.launch_sap(
+            sid="SQ4",
+            client="012",
+            user="robot_t",
+            password=os.getenv("secret")
+        )
+        ```
+    """
+    self._launch(
+        root_sap_dir, 
+        sid, 
+        client, 
+        user, 
+        password, 
+        maximise
+    )
+
+    time.sleep(5)
+    if quit_auto:
+        atexit.register(self.quit)
+
+
+
+def open_new_window(self, window_to_handle_opening: Window) ‑> None +
+
+

Opens new sap window

SAP must be already launched and window that is not busy must be available Warning, as of now, this method will not wait for window to appear if any other window is opened and has the default windows title

- -

Args: - window_to_handle_opening: idle SAP window that will be used to open new window

- -

Raises: - WindowDidNotAppearException: no SAP window appeared

- -

Example: -

main_window = pss.attach_window(0, 0)
+

Args

+
+
window_to_handle_opening
+
idle SAP window that will be used to open new window
+
+

Raises

+
+
WindowDidNotAppearException
+
no SAP window appeared
+
+

Example

+
main_window = pss.attach_window(0, 0)
 pss.open_new_window(main_window)
-

+
+
+ +Expand source code + +
def open_new_window(self, window_to_handle_opening: window.Window) -> None:
+    """
+    Opens new sap window
+
+    SAP must be already launched and window that is not busy must be available
+    Warning, as of now, this method will not wait for window to appear if any
+    other window is opened and has the default windows title
+
+    Args:
+        window_to_handle_opening: idle SAP window that will be used to open new window
+
+    Raises:
+        WindowDidNotAppearException: no SAP window appeared
+
+    Example:
+        ```
+        main_window = pss.attach_window(0, 0)
+        pss.open_new_window(main_window)
+        ```
+    """
+    window_to_handle_opening.session_handle.createSession()
+
+    utils.wait_for_window_title(self.default_window_title)
+
+
+
+def quit(self) ‑> None +
+
+

Tries to close the sap normal way (from main window), then kills the process

+
+ +Expand source code + +
def quit(self) -> None:
+    """
+    Tries to close the sap normal way (from main window), then kills the process
+    """
+    try:
+        main_window = self.attach_window(0, 0)
+        main_window.select("wnd[0]/mbar/menu[4]/menu[12]")
+        main_window.press("wnd[1]/usr/btnSPOP-OPTION1")
+
+    finally:
+        utils.kill_process("saplogon.exe")
+
+
+ + + +
+ +
- + + + + + \ No newline at end of file diff --git a/docs/pysapscript/shell_table.html b/docs/pysapscript/shell_table.html new file mode 100644 index 0000000..cc87dde --- /dev/null +++ b/docs/pysapscript/shell_table.html @@ -0,0 +1,1067 @@ + + + + + + +pysapscript.shell_table API documentation + + + + + + + + + + + +
+
+
+

Module pysapscript.shell_table

+
+
+
+ +Expand source code + +
from typing import Self, Any, ClassVar
+from typing import overload
+
+import win32com.client
+from win32com.universal import com_error
+import polars as pl
+import pandas
+
+from pysapscript.types_ import exceptions
+
+
+class ShellTable:
+    """
+    A class representing a shell table
+    """
+
+    def __init__(self, session_handle: win32com.client.CDispatch, element: str, load_table: bool = True) -> None:
+        """
+        Args:
+            session_handle (win32com.client.CDispatch): SAP session handle
+            element (str): SAP table element
+            load_table (bool): loads table if True, default True
+
+        Raises:
+            ActionException: error reading table data
+        """
+        self.table_element = element
+        self._session_handle = session_handle
+        self.data = self._read_shell_table(load_table)
+        self.rows = self.data.shape[0]
+        self.columns = self.data.shape[1]
+
+    def __repr__(self) -> str:
+        return repr(self.data)
+
+    def __str__(self) -> str:
+        return str(self.data)
+
+    def __eq__(self, other: object) -> bool:
+        return self.data == other
+
+    def __hash__(self) -> hash:
+        return hash(f"{self._session_handle}{self.table_element}{self.data.shape}")
+
+    def __getitem__(self, item) -> dict[str, Any] | list[dict[str, Any]]:
+        if isinstance(item, int):
+            return self.data.row(item, named=True)
+        elif isinstance(item, slice):
+            if item.step is not None:
+                raise NotImplementedError("Step is not supported")
+
+            sl = self.data.slice(item.start, item.stop - item.start)
+            return sl.to_dicts()
+        else:
+            raise ValueError("Incorrect type of index")
+
+    def __iter__(self) -> Self:
+        return ShellTableRowIterator(self.data)
+
+    def _read_shell_table(self, load_table: bool = True) -> pl.DataFrame:
+        """
+        Reads table of shell table
+
+        If the table is too big, the SAP will not render all the data.
+        Default is to load table before reading it
+
+        Args:
+            load_table (bool): whether to load table before reading
+
+        Returns:
+            pandas.DataFrame: table data
+
+        Raises:
+            ActionException: Error reading table
+
+        Example:
+            ```
+            table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell")
+            ```
+        """
+        try:
+            shell = self._session_handle.findById(self.table_element)
+
+            columns = shell.ColumnOrder
+            rows_count = shell.RowCount
+
+            if rows_count == 0:
+                return pl.DataFrame()
+
+            if load_table:
+                self.load()
+
+            data = [
+                {column: shell.GetCellValue(i, column) for column in columns}
+                for i in range(rows_count)
+            ]
+
+            return pl.DataFrame(data)
+
+        except Exception as ex:
+            raise exceptions.ActionException(f"Error reading element {self.table_element}: {ex}")
+
+    def to_polars_dataframe(self) -> pl.DataFrame:
+        """
+        Get table data as a polars DataFrame
+
+        Returns:
+            polars.DataFrame: table data
+        """
+        return self.data
+
+    def to_pandas_dataframe(self) -> pandas.DataFrame:
+        """
+        Get table data as a pandas DataFrame
+
+        Returns:
+            pandas.DataFrame: table data
+        """
+        return self.data.to_pandas()
+
+    def to_dict(self) -> dict[str, Any]:
+        """
+        Get table data as a dictionary
+
+        Returns:
+            dict[str, Any]: table data in named dictionary - column names as keys
+        """
+        return self.data.to_dict(as_series=False)
+
+    def to_dicts(self) -> list[dict[str, Any]]:
+        """
+        Get table data as a list of dictionaries
+
+        Returns:
+            list[dict[str, Any]]: table data in list of named dictionaries - rows
+        """
+        return self.data.to_dicts()
+
+    def get_column_names(self) -> list[str]:
+        """
+        Get column names
+
+        Returns:
+            list[str]: column names in the table
+        """
+        return self.data.columns
+
+    @overload
+    def cell(self, row: int, column: int) -> Any:
+        ...
+
+    @overload
+    def cell(self, row: int, column: str) -> Any:
+        ...
+
+    def cell(self, row: int, column: str | int) -> Any:
+        """
+        Get cell value
+
+        Args:
+            row (int): row index
+            column (str | int): column name or index
+
+        Returns:
+            Any: cell value
+        """
+        return self.data.item(row, column)
+
+    def load(self, move_by: int = 20, move_by_table_end: int = 2) -> None:
+        """
+        Skims through the table to load all data, as SAP only loads visible data
+
+        Args:
+            move_by (int): number of rows to move by, default 20
+            move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2
+
+        Raises:
+            ActionException: error finding table
+        """
+        row_position = 0
+
+        try:
+            shell = self._session_handle.findById(self.table_element)
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error finding table {self.table_element}: {e}"
+            )
+
+        while True:
+            try:
+                shell.currentCellRow = row_position
+                shell.SelectedRows = row_position
+
+            except com_error:
+                """no more rows for this step"""
+                break
+
+            row_position += move_by
+
+        row_position -= 20
+        while True:
+            try:
+                shell.currentCellRow = row_position
+                shell.SelectedRows = row_position
+
+            except com_error:
+                """no more rows for this step"""
+                break
+
+            row_position += move_by_table_end
+
+    def press_button(self, button: str) -> None:
+        """
+        Presses button that is in a shell table
+
+        Args:
+            button (str): button name
+
+        Raises:
+            ActionException: error pressing shell button
+
+        Example:
+            ```
+            main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
+            ```
+        """
+        try:
+            self._session_handle.findById(self.table_element).pressButton(button)
+
+        except Exception as e:
+            raise exceptions.ActionException(f"Error pressing button {button}: {e}")
+
+    def select_rows(self, indexes: list[int]) -> None:
+        """
+        Presses button that is in a shell table
+
+        Args:
+            indexes (list[int]): indexes of rows to select, starting with 0
+
+        Raises:
+            ActionException: error selecting shell rows
+
+        Example:
+            ```
+            main_window.select_shell_rows("wnd[0]/usr/shellContent/shell", [0, 1, 2])
+            ```
+        """
+        try:
+            value = ",".join([str(n) for n in indexes])
+            self._session_handle.findById(self.table_element).selectedRows = value
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error selecting rows with indexes {indexes}: {e}"
+            )
+
+    def change_checkbox(self, checkbox: str, flag: bool) -> None:
+        """
+        Sets checkbox in a shell table
+
+        Args:
+            checkbox (str): checkbox name
+            flag (bool): True for checked, False for unchecked
+
+        Raises:
+            ActionException: error setting shell checkbox
+
+        Example:
+            ```
+            main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
+            ```
+        """
+        try:
+            self._session_handle.findById(self.table_element).changeCheckbox(checkbox, "1", flag)
+
+        except Exception as e:
+            raise exceptions.ActionException(f"Error setting element {self.table_element}: {e}")
+
+
+class ShellTableRowIterator:
+    """
+    Iterator for shell table rows
+    """
+    def __init__(self, data: pl.DataFrame) -> None:
+        self.data = data
+        self.index = 0
+
+    def __iter__(self) -> Self:
+        return self
+
+    def __next__(self) -> dict[str, Any]:
+        if self.index >= self.data.shape[0]:
+            raise StopIteration
+
+        value = self.data.row(self.index, named=True)
+        self.index += 1
+
+        return value
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class ShellTable +(session_handle: win32com.client.CDispatch, element: str, load_table: bool = True) +
+
+

A class representing a shell table

+

Args

+
+
session_handle : win32com.client.CDispatch
+
SAP session handle
+
element : str
+
SAP table element
+
load_table : bool
+
loads table if True, default True
+
+

Raises

+
+
ActionException
+
error reading table data
+
+
+ +Expand source code + +
class ShellTable:
+    """
+    A class representing a shell table
+    """
+
+    def __init__(self, session_handle: win32com.client.CDispatch, element: str, load_table: bool = True) -> None:
+        """
+        Args:
+            session_handle (win32com.client.CDispatch): SAP session handle
+            element (str): SAP table element
+            load_table (bool): loads table if True, default True
+
+        Raises:
+            ActionException: error reading table data
+        """
+        self.table_element = element
+        self._session_handle = session_handle
+        self.data = self._read_shell_table(load_table)
+        self.rows = self.data.shape[0]
+        self.columns = self.data.shape[1]
+
+    def __repr__(self) -> str:
+        return repr(self.data)
+
+    def __str__(self) -> str:
+        return str(self.data)
+
+    def __eq__(self, other: object) -> bool:
+        return self.data == other
+
+    def __hash__(self) -> hash:
+        return hash(f"{self._session_handle}{self.table_element}{self.data.shape}")
+
+    def __getitem__(self, item) -> dict[str, Any] | list[dict[str, Any]]:
+        if isinstance(item, int):
+            return self.data.row(item, named=True)
+        elif isinstance(item, slice):
+            if item.step is not None:
+                raise NotImplementedError("Step is not supported")
+
+            sl = self.data.slice(item.start, item.stop - item.start)
+            return sl.to_dicts()
+        else:
+            raise ValueError("Incorrect type of index")
+
+    def __iter__(self) -> Self:
+        return ShellTableRowIterator(self.data)
+
+    def _read_shell_table(self, load_table: bool = True) -> pl.DataFrame:
+        """
+        Reads table of shell table
+
+        If the table is too big, the SAP will not render all the data.
+        Default is to load table before reading it
+
+        Args:
+            load_table (bool): whether to load table before reading
+
+        Returns:
+            pandas.DataFrame: table data
+
+        Raises:
+            ActionException: Error reading table
+
+        Example:
+            ```
+            table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell")
+            ```
+        """
+        try:
+            shell = self._session_handle.findById(self.table_element)
+
+            columns = shell.ColumnOrder
+            rows_count = shell.RowCount
+
+            if rows_count == 0:
+                return pl.DataFrame()
+
+            if load_table:
+                self.load()
+
+            data = [
+                {column: shell.GetCellValue(i, column) for column in columns}
+                for i in range(rows_count)
+            ]
+
+            return pl.DataFrame(data)
+
+        except Exception as ex:
+            raise exceptions.ActionException(f"Error reading element {self.table_element}: {ex}")
+
+    def to_polars_dataframe(self) -> pl.DataFrame:
+        """
+        Get table data as a polars DataFrame
+
+        Returns:
+            polars.DataFrame: table data
+        """
+        return self.data
+
+    def to_pandas_dataframe(self) -> pandas.DataFrame:
+        """
+        Get table data as a pandas DataFrame
+
+        Returns:
+            pandas.DataFrame: table data
+        """
+        return self.data.to_pandas()
+
+    def to_dict(self) -> dict[str, Any]:
+        """
+        Get table data as a dictionary
+
+        Returns:
+            dict[str, Any]: table data in named dictionary - column names as keys
+        """
+        return self.data.to_dict(as_series=False)
+
+    def to_dicts(self) -> list[dict[str, Any]]:
+        """
+        Get table data as a list of dictionaries
+
+        Returns:
+            list[dict[str, Any]]: table data in list of named dictionaries - rows
+        """
+        return self.data.to_dicts()
+
+    def get_column_names(self) -> list[str]:
+        """
+        Get column names
+
+        Returns:
+            list[str]: column names in the table
+        """
+        return self.data.columns
+
+    @overload
+    def cell(self, row: int, column: int) -> Any:
+        ...
+
+    @overload
+    def cell(self, row: int, column: str) -> Any:
+        ...
+
+    def cell(self, row: int, column: str | int) -> Any:
+        """
+        Get cell value
+
+        Args:
+            row (int): row index
+            column (str | int): column name or index
+
+        Returns:
+            Any: cell value
+        """
+        return self.data.item(row, column)
+
+    def load(self, move_by: int = 20, move_by_table_end: int = 2) -> None:
+        """
+        Skims through the table to load all data, as SAP only loads visible data
+
+        Args:
+            move_by (int): number of rows to move by, default 20
+            move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2
+
+        Raises:
+            ActionException: error finding table
+        """
+        row_position = 0
+
+        try:
+            shell = self._session_handle.findById(self.table_element)
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error finding table {self.table_element}: {e}"
+            )
+
+        while True:
+            try:
+                shell.currentCellRow = row_position
+                shell.SelectedRows = row_position
+
+            except com_error:
+                """no more rows for this step"""
+                break
+
+            row_position += move_by
+
+        row_position -= 20
+        while True:
+            try:
+                shell.currentCellRow = row_position
+                shell.SelectedRows = row_position
+
+            except com_error:
+                """no more rows for this step"""
+                break
+
+            row_position += move_by_table_end
+
+    def press_button(self, button: str) -> None:
+        """
+        Presses button that is in a shell table
+
+        Args:
+            button (str): button name
+
+        Raises:
+            ActionException: error pressing shell button
+
+        Example:
+            ```
+            main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
+            ```
+        """
+        try:
+            self._session_handle.findById(self.table_element).pressButton(button)
+
+        except Exception as e:
+            raise exceptions.ActionException(f"Error pressing button {button}: {e}")
+
+    def select_rows(self, indexes: list[int]) -> None:
+        """
+        Presses button that is in a shell table
+
+        Args:
+            indexes (list[int]): indexes of rows to select, starting with 0
+
+        Raises:
+            ActionException: error selecting shell rows
+
+        Example:
+            ```
+            main_window.select_shell_rows("wnd[0]/usr/shellContent/shell", [0, 1, 2])
+            ```
+        """
+        try:
+            value = ",".join([str(n) for n in indexes])
+            self._session_handle.findById(self.table_element).selectedRows = value
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error selecting rows with indexes {indexes}: {e}"
+            )
+
+    def change_checkbox(self, checkbox: str, flag: bool) -> None:
+        """
+        Sets checkbox in a shell table
+
+        Args:
+            checkbox (str): checkbox name
+            flag (bool): True for checked, False for unchecked
+
+        Raises:
+            ActionException: error setting shell checkbox
+
+        Example:
+            ```
+            main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
+            ```
+        """
+        try:
+            self._session_handle.findById(self.table_element).changeCheckbox(checkbox, "1", flag)
+
+        except Exception as e:
+            raise exceptions.ActionException(f"Error setting element {self.table_element}: {e}")
+
+

Methods

+
+
+def cell(self, row: int, column: str | int) ‑> Any +
+
+

Get cell value

+

Args

+
+
row : int
+
row index
+
+

column (str | int): column name or index

+

Returns

+
+
Any
+
cell value
+
+
+ +Expand source code + +
def cell(self, row: int, column: str | int) -> Any:
+    """
+    Get cell value
+
+    Args:
+        row (int): row index
+        column (str | int): column name or index
+
+    Returns:
+        Any: cell value
+    """
+    return self.data.item(row, column)
+
+
+
+def change_checkbox(self, checkbox: str, flag: bool) ‑> None +
+
+

Sets checkbox in a shell table

+

Args

+
+
checkbox : str
+
checkbox name
+
flag : bool
+
True for checked, False for unchecked
+
+

Raises

+
+
ActionException
+
error setting shell checkbox
+
+

Example

+
main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
+
+
+ +Expand source code + +
def change_checkbox(self, checkbox: str, flag: bool) -> None:
+    """
+    Sets checkbox in a shell table
+
+    Args:
+        checkbox (str): checkbox name
+        flag (bool): True for checked, False for unchecked
+
+    Raises:
+        ActionException: error setting shell checkbox
+
+    Example:
+        ```
+        main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
+        ```
+    """
+    try:
+        self._session_handle.findById(self.table_element).changeCheckbox(checkbox, "1", flag)
+
+    except Exception as e:
+        raise exceptions.ActionException(f"Error setting element {self.table_element}: {e}")
+
+
+
+def get_column_names(self) ‑> list[str] +
+
+

Get column names

+

Returns

+
+
list[str]
+
column names in the table
+
+
+ +Expand source code + +
def get_column_names(self) -> list[str]:
+    """
+    Get column names
+
+    Returns:
+        list[str]: column names in the table
+    """
+    return self.data.columns
+
+
+
+def load(self, move_by: int = 20, move_by_table_end: int = 2) ‑> None +
+
+

Skims through the table to load all data, as SAP only loads visible data

+

Args

+
+
move_by : int
+
number of rows to move by, default 20
+
move_by_table_end : int
+
number of rows to move by when reaching the end of the table, default 2
+
+

Raises

+
+
ActionException
+
error finding table
+
+
+ +Expand source code + +
def load(self, move_by: int = 20, move_by_table_end: int = 2) -> None:
+    """
+    Skims through the table to load all data, as SAP only loads visible data
+
+    Args:
+        move_by (int): number of rows to move by, default 20
+        move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2
+
+    Raises:
+        ActionException: error finding table
+    """
+    row_position = 0
+
+    try:
+        shell = self._session_handle.findById(self.table_element)
+
+    except Exception as e:
+        raise exceptions.ActionException(
+            f"Error finding table {self.table_element}: {e}"
+        )
+
+    while True:
+        try:
+            shell.currentCellRow = row_position
+            shell.SelectedRows = row_position
+
+        except com_error:
+            """no more rows for this step"""
+            break
+
+        row_position += move_by
+
+    row_position -= 20
+    while True:
+        try:
+            shell.currentCellRow = row_position
+            shell.SelectedRows = row_position
+
+        except com_error:
+            """no more rows for this step"""
+            break
+
+        row_position += move_by_table_end
+
+
+
+def press_button(self, button: str) ‑> None +
+
+

Presses button that is in a shell table

+

Args

+
+
button : str
+
button name
+
+

Raises

+
+
ActionException
+
error pressing shell button
+
+

Example

+
main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
+
+
+ +Expand source code + +
def press_button(self, button: str) -> None:
+    """
+    Presses button that is in a shell table
+
+    Args:
+        button (str): button name
+
+    Raises:
+        ActionException: error pressing shell button
+
+    Example:
+        ```
+        main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
+        ```
+    """
+    try:
+        self._session_handle.findById(self.table_element).pressButton(button)
+
+    except Exception as e:
+        raise exceptions.ActionException(f"Error pressing button {button}: {e}")
+
+
+
+def select_rows(self, indexes: list[int]) ‑> None +
+
+

Presses button that is in a shell table

+

Args

+
+
indexes : list[int]
+
indexes of rows to select, starting with 0
+
+

Raises

+
+
ActionException
+
error selecting shell rows
+
+

Example

+
main_window.select_shell_rows("wnd[0]/usr/shellContent/shell", [0, 1, 2])
+
+
+ +Expand source code + +
def select_rows(self, indexes: list[int]) -> None:
+    """
+    Presses button that is in a shell table
+
+    Args:
+        indexes (list[int]): indexes of rows to select, starting with 0
+
+    Raises:
+        ActionException: error selecting shell rows
+
+    Example:
+        ```
+        main_window.select_shell_rows("wnd[0]/usr/shellContent/shell", [0, 1, 2])
+        ```
+    """
+    try:
+        value = ",".join([str(n) for n in indexes])
+        self._session_handle.findById(self.table_element).selectedRows = value
+
+    except Exception as e:
+        raise exceptions.ActionException(
+            f"Error selecting rows with indexes {indexes}: {e}"
+        )
+
+
+
+def to_dict(self) ‑> dict[str, typing.Any] +
+
+

Get table data as a dictionary

+

Returns

+
+
dict[str, Any]
+
table data in named dictionary - column names as keys
+
+
+ +Expand source code + +
def to_dict(self) -> dict[str, Any]:
+    """
+    Get table data as a dictionary
+
+    Returns:
+        dict[str, Any]: table data in named dictionary - column names as keys
+    """
+    return self.data.to_dict(as_series=False)
+
+
+
+def to_dicts(self) ‑> list[dict[str, typing.Any]] +
+
+

Get table data as a list of dictionaries

+

Returns

+
+
list[dict[str, Any]]
+
table data in list of named dictionaries - rows
+
+
+ +Expand source code + +
def to_dicts(self) -> list[dict[str, Any]]:
+    """
+    Get table data as a list of dictionaries
+
+    Returns:
+        list[dict[str, Any]]: table data in list of named dictionaries - rows
+    """
+    return self.data.to_dicts()
+
+
+
+def to_pandas_dataframe(self) ‑> pandas.core.frame.DataFrame +
+
+

Get table data as a pandas DataFrame

+

Returns

+
+
pandas.DataFrame
+
table data
+
+
+ +Expand source code + +
def to_pandas_dataframe(self) -> pandas.DataFrame:
+    """
+    Get table data as a pandas DataFrame
+
+    Returns:
+        pandas.DataFrame: table data
+    """
+    return self.data.to_pandas()
+
+
+
+def to_polars_dataframe(self) ‑> polars.dataframe.frame.DataFrame +
+
+

Get table data as a polars DataFrame

+

Returns

+
+
polars.DataFrame
+
table data
+
+
+ +Expand source code + +
def to_polars_dataframe(self) -> pl.DataFrame:
+    """
+    Get table data as a polars DataFrame
+
+    Returns:
+        polars.DataFrame: table data
+    """
+    return self.data
+
+
+
+
+
+class ShellTableRowIterator +(data: polars.dataframe.frame.DataFrame) +
+
+

Iterator for shell table rows

+
+ +Expand source code + +
class ShellTableRowIterator:
+    """
+    Iterator for shell table rows
+    """
+    def __init__(self, data: pl.DataFrame) -> None:
+        self.data = data
+        self.index = 0
+
+    def __iter__(self) -> Self:
+        return self
+
+    def __next__(self) -> dict[str, Any]:
+        if self.index >= self.data.shape[0]:
+            raise StopIteration
+
+        value = self.data.row(self.index, named=True)
+        self.index += 1
+
+        return value
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/pysapscript/types_.html b/docs/pysapscript/types_.html deleted file mode 100644 index f8520a1..0000000 --- a/docs/pysapscript/types_.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - pysapscript.types_ API documentation - - - - - - - - - -
-
-

-pysapscript.types_

- - - - - -
-
- - \ No newline at end of file diff --git a/docs/pysapscript/types_/exceptions.html b/docs/pysapscript/types_/exceptions.html index 2c43334..517e94b 100644 --- a/docs/pysapscript/types_/exceptions.html +++ b/docs/pysapscript/types_/exceptions.html @@ -1,382 +1,145 @@ - - - - pysapscript.types_.exceptions API documentation - - - - - - - + + + +pysapscript.types_.exceptions API documentation + + + + + + + + + + - -
-
-

-pysapscript.types_.exceptions

- -

Exceptions thrown

-
- - - - - -
 1"""Exceptions thrown"""
- 2
- 3
- 4class WindowDidNotAppearException(Exception):
- 5    """Main windows didn't show up - possible pop-up window"""
- 6
- 7
- 8class AttachException(Exception):
- 9    """Error with attaching - connection or session"""
-10
-11
-12class ActionException(Exception):
-13    """Error performing action - click, select ..."""
-
- - -
-
- -
- - class - WindowDidNotAppearException(builtins.Exception): - - - -
- -
5class WindowDidNotAppearException(Exception):
-6    """Main windows didn't show up - possible pop-up window"""
-
- - -

Main windows didn't show up - possible pop-up window

-
- - -
-
Inherited Members
-
-
builtins.Exception
-
Exception
- -
-
builtins.BaseException
-
with_traceback
-
add_note
-
args
- -
-
-
-
-
- -
- - class - AttachException(builtins.Exception): - - - -
- -
 9class AttachException(Exception):
-10    """Error with attaching - connection or session"""
-
- - -

Error with attaching - connection or session

-
- - -
-
Inherited Members
-
-
builtins.Exception
-
Exception
- -
-
builtins.BaseException
-
with_traceback
-
add_note
-
args
- -
-
-
-
-
- -
- - class - ActionException(builtins.Exception): - - - -
- -
13class ActionException(Exception):
-14    """Error performing action - click, select ..."""
-
- - -

Error performing action - click, select ...

+
+
+
+

Module pysapscript.types_.exceptions

+
+
+

Exceptions thrown

+
+ +Expand source code + +
"""Exceptions thrown"""
+
+
+class WindowDidNotAppearException(Exception):
+    """Main windows didn't show up - possible pop-up window"""
+
+
+class AttachException(Exception):
+    """Error with attaching - connection or session"""
+
+
+class ActionException(Exception):
+    """Error performing action - click, select ..."""
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class ActionException +(*args, **kwargs) +
+
+

Error performing action - click, select …

+
+ +Expand source code + +
class ActionException(Exception):
+    """Error performing action - click, select ..."""
+
+

Ancestors

+
    +
  • builtins.Exception
  • +
  • builtins.BaseException
  • +
+
+
+class AttachException +(*args, **kwargs) +
+
+

Error with attaching - connection or session

+
+ +Expand source code + +
class AttachException(Exception):
+    """Error with attaching - connection or session"""
+
+

Ancestors

+
    +
  • builtins.Exception
  • +
  • builtins.BaseException
  • +
+
+
+class WindowDidNotAppearException +(*args, **kwargs) +
+
+

Main windows didn't show up - possible pop-up window

+
+ +Expand source code + +
class WindowDidNotAppearException(Exception):
+    """Main windows didn't show up - possible pop-up window"""
+
+

Ancestors

+
    +
  • builtins.Exception
  • +
  • builtins.BaseException
  • +
+
+
+
+
+
-
- + + + + + \ No newline at end of file diff --git a/docs/pysapscript/types_/index.html b/docs/pysapscript/types_/index.html new file mode 100644 index 0000000..fa1eb56 --- /dev/null +++ b/docs/pysapscript/types_/index.html @@ -0,0 +1,70 @@ + + + + + + +pysapscript.types_ API documentation + + + + + + + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/docs/pysapscript/types_/types.html b/docs/pysapscript/types_/types.html index 67d33cd..e618f5b 100644 --- a/docs/pysapscript/types_/types.html +++ b/docs/pysapscript/types_/types.html @@ -1,374 +1,137 @@ - - - - pysapscript.types_.types API documentation - - - - - - - + + + +pysapscript.types_.types API documentation + + + + + + + + + + - + + + \ No newline at end of file diff --git a/docs/pysapscript/utils.html b/docs/pysapscript/utils.html deleted file mode 100644 index fe9be65..0000000 --- a/docs/pysapscript/utils.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - pysapscript.utils API documentation - - - - - - - - - -
-
-

-pysapscript.utils

- - - - - -
-
- - \ No newline at end of file diff --git a/docs/pysapscript/utils/index.html b/docs/pysapscript/utils/index.html new file mode 100644 index 0000000..a24137b --- /dev/null +++ b/docs/pysapscript/utils/index.html @@ -0,0 +1,65 @@ + + + + + + +pysapscript.utils API documentation + + + + + + + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/docs/pysapscript/utils/utils.html b/docs/pysapscript/utils/utils.html index a6c1aa2..cb6be53 100644 --- a/docs/pysapscript/utils/utils.html +++ b/docs/pysapscript/utils/utils.html @@ -1,374 +1,185 @@ - - - - pysapscript.utils.utils API documentation - - - - - - - + + + +pysapscript.utils.utils API documentation + + + + + + + + + + - -
-
-

-pysapscript.utils.utils

- - - - - - -
 1import os
- 2import time
- 3
- 4from win32gui import FindWindow, GetWindowText
- 5
- 6from pysapscript.types_.exceptions import WindowDidNotAppearException
- 7
- 8
- 9def kill_process(process: str):
-10    """
-11    Kills process by process name
-12
-13    Args:
-14        process (str): process name
-15    """
-16    os.system("taskkill /f /im %s" % process)
-17
-18
-19def wait_for_window_title(title: str, timeout_loops: int = 10):
-20    """
-21    loops until title of expected window appears,
-22    waits for 1 second between each check
-23
-24    Args:
-25        title (str): expected window title
-26        timeout_loops (int): number of loops
-27
-28    Raises:
-29        WindowDidNotAppearException: Expected window did not appear
-30    """
-31
-32    for _ in range(0, timeout_loops):
-33
-34        window_pid = FindWindow("SAP_FRONTEND_SESSION", None)
-35        window_text = GetWindowText(window_pid)
-36        if window_text.startswith(title):
-37            break
-38
-39        time.sleep(1)
-40
-41    else:
-42        raise WindowDidNotAppearException(
-43            "Window title %s didn't appear within time window!" % title
-44        )
-
- - -
-
- -
- - def - kill_process(process: str): - - - -
- -
10def kill_process(process: str):
-11    """
-12    Kills process by process name
-13
-14    Args:
-15        process (str): process name
-16    """
-17    os.system("taskkill /f /im %s" % process)
-
- - -

Kills process by process name

- -

Args: - process (str): process name

-
- - -
-
- -
- - def - wait_for_window_title(title: str, timeout_loops: int = 10): - - - -
- -
20def wait_for_window_title(title: str, timeout_loops: int = 10):
-21    """
-22    loops until title of expected window appears,
-23    waits for 1 second between each check
-24
-25    Args:
-26        title (str): expected window title
-27        timeout_loops (int): number of loops
-28
-29    Raises:
-30        WindowDidNotAppearException: Expected window did not appear
-31    """
-32
-33    for _ in range(0, timeout_loops):
-34
-35        window_pid = FindWindow("SAP_FRONTEND_SESSION", None)
-36        window_text = GetWindowText(window_pid)
-37        if window_text.startswith(title):
-38            break
-39
-40        time.sleep(1)
-41
-42    else:
-43        raise WindowDidNotAppearException(
-44            "Window title %s didn't appear within time window!" % title
-45        )
-
- - -

loops until title of expected window appears, +

+
+
+

Module pysapscript.utils.utils

+
+
+
+ +Expand source code + +
import os
+import time
+
+from win32gui import FindWindow, GetWindowText
+
+from pysapscript.types_.exceptions import WindowDidNotAppearException
+
+
+def kill_process(process: str):
+    """
+    Kills process by process name
+
+    Args:
+        process (str): process name
+    """
+    os.system("taskkill /f /im %s" % process)
+
+
+def wait_for_window_title(title: str, timeout_loops: int = 10):
+    """
+    loops until title of expected window appears,
+    waits for 1 second between each check
+
+    Args:
+        title (str): expected window title
+        timeout_loops (int): number of loops
+
+    Raises:
+        WindowDidNotAppearException: Expected window did not appear
+    """
+
+    for _ in range(0, timeout_loops):
+
+        window_pid = FindWindow("SAP_FRONTEND_SESSION", None)
+        window_text = GetWindowText(window_pid)
+        if window_text.startswith(title):
+            break
+
+        time.sleep(1)
+
+    else:
+        raise WindowDidNotAppearException(
+            "Window title %s didn't appear within time window!" % title
+        )
+
+
+
+
+
+
+
+

Functions

+
+
+def kill_process(process: str) +
+
+

Kills process by process name

+

Args

+
+
process : str
+
process name
+
+
+ +Expand source code + +
def kill_process(process: str):
+    """
+    Kills process by process name
+
+    Args:
+        process (str): process name
+    """
+    os.system("taskkill /f /im %s" % process)
+
+
+
+def wait_for_window_title(title: str, timeout_loops: int = 10) +
+
+

loops until title of expected window appears, waits for 1 second between each check

- -

Args: - title (str): expected window title - timeout_loops (int): number of loops

- -

Raises: - WindowDidNotAppearException: Expected window did not appear

+

Args

+
+
title : str
+
expected window title
+
timeout_loops : int
+
number of loops
+
+

Raises

+
+
WindowDidNotAppearException
+
Expected window did not appear
+
+
+ +Expand source code + +
def wait_for_window_title(title: str, timeout_loops: int = 10):
+    """
+    loops until title of expected window appears,
+    waits for 1 second between each check
+
+    Args:
+        title (str): expected window title
+        timeout_loops (int): number of loops
+
+    Raises:
+        WindowDidNotAppearException: Expected window did not appear
+    """
+
+    for _ in range(0, timeout_loops):
+
+        window_pid = FindWindow("SAP_FRONTEND_SESSION", None)
+        window_text = GetWindowText(window_pid)
+        if window_text.startswith(title):
+            break
+
+        time.sleep(1)
+
+    else:
+        raise WindowDidNotAppearException(
+            "Window title %s didn't appear within time window!" % title
+        )
+
+
+
+
+
+
+
+
-
- + + + + + \ No newline at end of file diff --git a/docs/pysapscript/window.html b/docs/pysapscript/window.html index c2946b1..68fbf1f 100644 --- a/docs/pysapscript/window.html +++ b/docs/pysapscript/window.html @@ -1,1693 +1,1266 @@ - - - - pysapscript.window API documentation - - - - - - - + + + +pysapscript.window API documentation + + + + + + + + + + - + + + \ No newline at end of file diff --git a/docs/search.js b/docs/search.js deleted file mode 100644 index e16ea38..0000000 --- a/docs/search.js +++ /dev/null @@ -1,46 +0,0 @@ -window.pdocSearch = (function(){ -/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();oDescription\n\n

SAP scripting for Python automatization

\n\n

Installation

\n\n
pip install pysapscript\n
\n\n

Usage

\n\n

Create pysapscript object

\n\n
\n
pss = pysapscript.Sapscript()\n
\n
\n\n

parameter default_window_title: = \"SAP Easy Access\"

\n\n

Launch Sap

\n\n
\n
pss.launch_sap(\n    sid="SQ4",\n    client="012",\n    user="robot_t",\n    password=os.getenv("secret_password")\n)\n
\n
\n\n

additional parameters:

\n\n
\n
root_sap_dir = Path(r"C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui")\nmaximise = True\nquit_auto = True\n
\n
\n\n

Attach to window:

\n\n
\n
window = pss.attach_window(0, 0)\n
\n
\n\n

positional parameters (0, 0) -> (connection, session)

\n\n

Quitting SAP:

\n\n
    \n
  • will automatically quit if not specified differently
  • \n
  • manual quitting: pss.quit()
  • \n
\n\n

Performing action:

\n\n
window.write(element, value)\nwindow.press(element)\nwindow.select(element)\nwindow.read(element)\nwindow.read_shell_table(element)\nwindow.press_shell_button(element, button_name)\nwindow.change_shell_checkbox(element, checkbox_name, boolean)\n
\n\n
    \n
  • use SAP path wnd[0]..... for elements
  • \n
\n\n

And another available actions...

\n\n
    \n
  • close window, open new window, start transaction, navigate, maximize
  • \n
\n"}, "pysapscript.pysapscript": {"fullname": "pysapscript.pysapscript", "modulename": "pysapscript.pysapscript", "kind": "module", "doc": "

\n"}, "pysapscript.pysapscript.Sapscript": {"fullname": "pysapscript.pysapscript.Sapscript", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript", "kind": "class", "doc": "

\n"}, "pysapscript.pysapscript.Sapscript.__init__": {"fullname": "pysapscript.pysapscript.Sapscript.__init__", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript.__init__", "kind": "function", "doc": "

\n", "signature": "(default_window_title: str = 'SAP Easy Access')"}, "pysapscript.pysapscript.Sapscript.default_window_title": {"fullname": "pysapscript.pysapscript.Sapscript.default_window_title", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript.default_window_title", "kind": "variable", "doc": "

\n"}, "pysapscript.pysapscript.Sapscript.launch_sap": {"fullname": "pysapscript.pysapscript.Sapscript.launch_sap", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript.launch_sap", "kind": "function", "doc": "

Launches SAP and waits for it to load

\n\n

Args:\n root_sap_dir (pathlib.Path): SAP directory in the system\n sid (str): SAP system ID\n client (str): SAP client\n user (str): SAP user\n password (str): SAP password\n maximise (bool): maximises window after start if True\n quit_auto (bool): quits automatically on SAP exit if True

\n\n

Raises:\n WindowDidNotAppearException: No SAP window appeared

\n\n

Example:\n

pss.launch_sap(\n    sid=\"SQ4\",\n    client=\"012\",\n    user=\"robot_t\",\n    password=os.getenv(\"secret\")\n)\n

\n", "signature": "(\tself,\t*,\troot_sap_dir: pathlib.Path = WindowsPath('C:/Program Files (x86)/SAP/FrontEnd/SAPgui'),\tsid: str,\tclient: str,\tuser: str,\tpassword: str,\tmaximise: bool = True,\tquit_auto: bool = True):", "funcdef": "def"}, "pysapscript.pysapscript.Sapscript.quit": {"fullname": "pysapscript.pysapscript.Sapscript.quit", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript.quit", "kind": "function", "doc": "

Tries to close the sap normal way (from main window), then kills the process

\n", "signature": "(self):", "funcdef": "def"}, "pysapscript.pysapscript.Sapscript.attach_window": {"fullname": "pysapscript.pysapscript.Sapscript.attach_window", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript.attach_window", "kind": "function", "doc": "

Attaches window by connection and session number ID

\n\n

Connection starts with 0 and is +1 for each client\nSession start with 0 and is +1 for each new window opened

\n\n

Args:\n connection (int): connection number\n session (int): session number

\n\n

Returns:\n window.Window: window attached

\n\n

Raises:\n AttributeError: srong connection or session\n AttachException: could not attach to SAP window

\n\n

Example:\n

main_window = pss.attach_window(0, 0)\n

\n", "signature": "(self, connection: int, session: int) -> pysapscript.window.Window:", "funcdef": "def"}, "pysapscript.pysapscript.Sapscript.open_new_window": {"fullname": "pysapscript.pysapscript.Sapscript.open_new_window", "modulename": "pysapscript.pysapscript", "qualname": "Sapscript.open_new_window", "kind": "function", "doc": "

Opens new sap window

\n\n

SAP must be already launched and window that is not busy must be available\nWarning, as of now, this method will not wait for window to appear if any\nother window is opened and has the default windows title

\n\n

Args:\n window_to_handle_opening: idle SAP window that will be used to open new window

\n\n

Raises:\n WindowDidNotAppearException: no SAP window appeared

\n\n

Example:\n

main_window = pss.attach_window(0, 0)\npss.open_new_window(main_window)\n

\n", "signature": "(self, window_to_handle_opening: pysapscript.window.Window):", "funcdef": "def"}, "pysapscript.types_": {"fullname": "pysapscript.types_", "modulename": "pysapscript.types_", "kind": "module", "doc": "

\n"}, "pysapscript.types_.exceptions": {"fullname": "pysapscript.types_.exceptions", "modulename": "pysapscript.types_.exceptions", "kind": "module", "doc": "

Exceptions thrown

\n"}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"fullname": "pysapscript.types_.exceptions.WindowDidNotAppearException", "modulename": "pysapscript.types_.exceptions", "qualname": "WindowDidNotAppearException", "kind": "class", "doc": "

Main windows didn't show up - possible pop-up window

\n", "bases": "builtins.Exception"}, "pysapscript.types_.exceptions.AttachException": {"fullname": "pysapscript.types_.exceptions.AttachException", "modulename": "pysapscript.types_.exceptions", "qualname": "AttachException", "kind": "class", "doc": "

Error with attaching - connection or session

\n", "bases": "builtins.Exception"}, "pysapscript.types_.exceptions.ActionException": {"fullname": "pysapscript.types_.exceptions.ActionException", "modulename": "pysapscript.types_.exceptions", "qualname": "ActionException", "kind": "class", "doc": "

Error performing action - click, select ...

\n", "bases": "builtins.Exception"}, "pysapscript.types_.types": {"fullname": "pysapscript.types_.types", "modulename": "pysapscript.types_.types", "kind": "module", "doc": "

\n"}, "pysapscript.types_.types.NavigateAction": {"fullname": "pysapscript.types_.types.NavigateAction", "modulename": "pysapscript.types_.types", "qualname": "NavigateAction", "kind": "class", "doc": "

Type for Window.navigate()

\n", "bases": "enum.Enum"}, "pysapscript.types_.types.NavigateAction.enter": {"fullname": "pysapscript.types_.types.NavigateAction.enter", "modulename": "pysapscript.types_.types", "qualname": "NavigateAction.enter", "kind": "variable", "doc": "

\n", "default_value": "<NavigateAction.enter: 'enter'>"}, "pysapscript.types_.types.NavigateAction.back": {"fullname": "pysapscript.types_.types.NavigateAction.back", "modulename": "pysapscript.types_.types", "qualname": "NavigateAction.back", "kind": "variable", "doc": "

\n", "default_value": "<NavigateAction.back: 'back'>"}, "pysapscript.types_.types.NavigateAction.end": {"fullname": "pysapscript.types_.types.NavigateAction.end", "modulename": "pysapscript.types_.types", "qualname": "NavigateAction.end", "kind": "variable", "doc": "

\n", "default_value": "<NavigateAction.end: 'end'>"}, "pysapscript.types_.types.NavigateAction.cancel": {"fullname": "pysapscript.types_.types.NavigateAction.cancel", "modulename": "pysapscript.types_.types", "qualname": "NavigateAction.cancel", "kind": "variable", "doc": "

\n", "default_value": "<NavigateAction.cancel: 'cancel'>"}, "pysapscript.types_.types.NavigateAction.save": {"fullname": "pysapscript.types_.types.NavigateAction.save", "modulename": "pysapscript.types_.types", "qualname": "NavigateAction.save", "kind": "variable", "doc": "

\n", "default_value": "<NavigateAction.save: 'save'>"}, "pysapscript.utils": {"fullname": "pysapscript.utils", "modulename": "pysapscript.utils", "kind": "module", "doc": "

\n"}, "pysapscript.utils.utils": {"fullname": "pysapscript.utils.utils", "modulename": "pysapscript.utils.utils", "kind": "module", "doc": "

\n"}, "pysapscript.utils.utils.kill_process": {"fullname": "pysapscript.utils.utils.kill_process", "modulename": "pysapscript.utils.utils", "qualname": "kill_process", "kind": "function", "doc": "

Kills process by process name

\n\n

Args:\n process (str): process name

\n", "signature": "(process: str):", "funcdef": "def"}, "pysapscript.utils.utils.wait_for_window_title": {"fullname": "pysapscript.utils.utils.wait_for_window_title", "modulename": "pysapscript.utils.utils", "qualname": "wait_for_window_title", "kind": "function", "doc": "

loops until title of expected window appears,\nwaits for 1 second between each check

\n\n

Args:\n title (str): expected window title\n timeout_loops (int): number of loops

\n\n

Raises:\n WindowDidNotAppearException: Expected window did not appear

\n", "signature": "(title: str, timeout_loops: int = 10):", "funcdef": "def"}, "pysapscript.window": {"fullname": "pysapscript.window", "modulename": "pysapscript.window", "kind": "module", "doc": "

\n"}, "pysapscript.window.Window": {"fullname": "pysapscript.window.Window", "modulename": "pysapscript.window", "qualname": "Window", "kind": "class", "doc": "

\n"}, "pysapscript.window.Window.__init__": {"fullname": "pysapscript.window.Window.__init__", "modulename": "pysapscript.window", "qualname": "Window.__init__", "kind": "function", "doc": "

\n", "signature": "(\tconnection: int,\tconnection_handle: win32com.client.CDispatch,\tsession: int,\tsession_handle: win32com.client.CDispatch)"}, "pysapscript.window.Window.connection": {"fullname": "pysapscript.window.Window.connection", "modulename": "pysapscript.window", "qualname": "Window.connection", "kind": "variable", "doc": "

\n"}, "pysapscript.window.Window.connection_handle": {"fullname": "pysapscript.window.Window.connection_handle", "modulename": "pysapscript.window", "qualname": "Window.connection_handle", "kind": "variable", "doc": "

\n"}, "pysapscript.window.Window.session": {"fullname": "pysapscript.window.Window.session", "modulename": "pysapscript.window", "qualname": "Window.session", "kind": "variable", "doc": "

\n"}, "pysapscript.window.Window.session_handle": {"fullname": "pysapscript.window.Window.session_handle", "modulename": "pysapscript.window", "qualname": "Window.session_handle", "kind": "variable", "doc": "

\n"}, "pysapscript.window.Window.maximize": {"fullname": "pysapscript.window.Window.maximize", "modulename": "pysapscript.window", "qualname": "Window.maximize", "kind": "function", "doc": "

Maximizes this sap window

\n", "signature": "(self):", "funcdef": "def"}, "pysapscript.window.Window.restore": {"fullname": "pysapscript.window.Window.restore", "modulename": "pysapscript.window", "qualname": "Window.restore", "kind": "function", "doc": "

Restores sap window to its default size, resp. before maximization

\n", "signature": "(self):", "funcdef": "def"}, "pysapscript.window.Window.close_window": {"fullname": "pysapscript.window.Window.close_window", "modulename": "pysapscript.window", "qualname": "Window.close_window", "kind": "function", "doc": "

Closes this sap window

\n", "signature": "(self):", "funcdef": "def"}, "pysapscript.window.Window.navigate": {"fullname": "pysapscript.window.Window.navigate", "modulename": "pysapscript.window", "qualname": "Window.navigate", "kind": "function", "doc": "

Navigates SAP: enter, back, end, cancel, save

\n\n

Args:\n action (NavigateAction): enter, back, end, cancel, save

\n\n

Raises:\n ActionException: wrong navigation action

\n\n

Example:\n

main_window.navigate(NavigateAction.enter)\n

\n", "signature": "(self, action: pysapscript.types_.types.NavigateAction):", "funcdef": "def"}, "pysapscript.window.Window.start_transaction": {"fullname": "pysapscript.window.Window.start_transaction", "modulename": "pysapscript.window", "qualname": "Window.start_transaction", "kind": "function", "doc": "

Starts transaction

\n\n

Args:\n transaction (str): transaction name

\n", "signature": "(self, transaction: str):", "funcdef": "def"}, "pysapscript.window.Window.press": {"fullname": "pysapscript.window.Window.press", "modulename": "pysapscript.window", "qualname": "Window.press", "kind": "function", "doc": "

Presses element

\n\n

Args:\n element (str): element to press

\n\n

Raises:\n ActionException: error clicking element

\n\n

Example:\n

main_window.press(\"wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03\")\n

\n", "signature": "(self, element: str):", "funcdef": "def"}, "pysapscript.window.Window.select": {"fullname": "pysapscript.window.Window.select", "modulename": "pysapscript.window", "qualname": "Window.select", "kind": "function", "doc": "

Selects element or menu item

\n\n

Args:\n element (str): element to select - tabs, menu items

\n\n

Raises:\n ActionException: error selecting element

\n\n

Example:\n

main_window.select(\"wnd[2]/tbar[0]/btn[1]\")\n

\n", "signature": "(self, element: str):", "funcdef": "def"}, "pysapscript.window.Window.write": {"fullname": "pysapscript.window.Window.write", "modulename": "pysapscript.window", "qualname": "Window.write", "kind": "function", "doc": "

Sets text property of an element

\n\n

Args:\n element (str): element to accept a value\n text (str): value to set

\n\n

Raises:\n ActionException: Error writing to element

\n\n

Example:\n

main_window.write(\"wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03\", \"VALUE\")\n

\n", "signature": "(self, element: str, text: str):", "funcdef": "def"}, "pysapscript.window.Window.read": {"fullname": "pysapscript.window.Window.read", "modulename": "pysapscript.window", "qualname": "Window.read", "kind": "function", "doc": "

Reads text property

\n\n

Args:\n element (str): element to read

\n\n

Raises:\n ActionException: Error reading element

\n\n

Example:\n

value = main_window.read(\"wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03\")\n

\n", "signature": "(self, element: str) -> str:", "funcdef": "def"}, "pysapscript.window.Window.visualize": {"fullname": "pysapscript.window.Window.visualize", "modulename": "pysapscript.window", "qualname": "Window.visualize", "kind": "function", "doc": "

draws red frame around the element

\n\n

Args:\n element (str): element to draw around\n seconds (int): seconds to wait for

\n\n

Raises:\n ActionException: Error visualizing element

\n", "signature": "(self, element: str, seconds: int = 1):", "funcdef": "def"}, "pysapscript.window.Window.read_shell_table": {"fullname": "pysapscript.window.Window.read_shell_table", "modulename": "pysapscript.window", "qualname": "Window.read_shell_table", "kind": "function", "doc": "

Reads table of shell table

\n\n

If the table is too big, the SAP will not render all the data.\nDefault is to load table before reading it

\n\n

Args:\n element (str): table element\n load_table (bool): whether to load table before reading

\n\n

Returns:\n pandas.DataFrame: table data

\n\n

Raises:\n ActionException: Error reading table

\n\n

Example:\n

table = main_window.read_shell_table(\"wnd[0]/usr/shellContent/shell\")\n

\n", "signature": "(\tself,\telement: str,\tload_table: bool = True) -> pandas.core.frame.DataFrame:", "funcdef": "def"}, "pysapscript.window.Window.load_shell_table": {"fullname": "pysapscript.window.Window.load_shell_table", "modulename": "pysapscript.window", "qualname": "Window.load_shell_table", "kind": "function", "doc": "

Skims through the table to load all data, as SAP only loads visible data

\n\n

Args:\n table_element (str): table element\n move_by (int): number of rows to move by, default 20\n move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2

\n\n

Raises:\n ActionException: error finding table

\n", "signature": "(\tself,\ttable_element: str,\tmove_by: int = 20,\tmove_by_table_end: int = 2):", "funcdef": "def"}, "pysapscript.window.Window.press_shell_button": {"fullname": "pysapscript.window.Window.press_shell_button", "modulename": "pysapscript.window", "qualname": "Window.press_shell_button", "kind": "function", "doc": "

Presses button that is in a shell table

\n\n

Args:\n element (str): table element\n button (str): button name

\n\n

Raises:\n ActionException: error pressing shell button

\n\n

Example:\n

main_window.press_shell_button(\"wnd[0]/usr/shellContent/shell\", \"%OPENDWN\")\n

\n", "signature": "(self, element: str, button: str):", "funcdef": "def"}, "pysapscript.window.Window.change_shell_checkbox": {"fullname": "pysapscript.window.Window.change_shell_checkbox", "modulename": "pysapscript.window", "qualname": "Window.change_shell_checkbox", "kind": "function", "doc": "

Sets checkbox in a shell table

\n\n

Args:\n element (str): table element\n checkbox (str): checkbox name\n flag (bool): True for checked, False for unchecked

\n\n

Raises:\n ActionException: error setting shell checkbox

\n\n

Example:\n

main_window.change_shell_checkbox(\"wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]\", \"%CHBX\", True)\n

\n", "signature": "(self, element: str, checkbox: str, flag: bool):", "funcdef": "def"}}, "docInfo": {"pysapscript": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 399}, "pysapscript.pysapscript": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.pysapscript.Sapscript": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.pysapscript.Sapscript.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 3}, "pysapscript.pysapscript.Sapscript.default_window_title": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.pysapscript.Sapscript.launch_sap": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 139, "bases": 0, "doc": 95}, "pysapscript.pysapscript.Sapscript.quit": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 16}, "pysapscript.pysapscript.Sapscript.attach_window": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 44, "bases": 0, "doc": 84}, "pysapscript.pysapscript.Sapscript.open_new_window": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 94}, "pysapscript.types_": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.types_.exceptions": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 4}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 12}, "pysapscript.types_.exceptions.AttachException": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 8}, "pysapscript.types_.exceptions.ActionException": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 8}, "pysapscript.types_.types": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.types_.types.NavigateAction": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 7}, "pysapscript.types_.types.NavigateAction.enter": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.types_.types.NavigateAction.back": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.types_.types.NavigateAction.end": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.types_.types.NavigateAction.cancel": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.types_.types.NavigateAction.save": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.utils": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.utils.utils": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.utils.utils.kill_process": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 15}, "pysapscript.utils.utils.wait_for_window_title": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 41}, "pysapscript.window": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.window.Window": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.window.Window.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 70, "bases": 0, "doc": 3}, "pysapscript.window.Window.connection": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.window.Window.connection_handle": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.window.Window.session": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.window.Window.session_handle": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pysapscript.window.Window.maximize": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 6}, "pysapscript.window.Window.restore": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 12}, "pysapscript.window.Window.close_window": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 6}, "pysapscript.window.Window.navigate": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 40}, "pysapscript.window.Window.start_transaction": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 12}, "pysapscript.window.Window.press": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 32}, "pysapscript.window.Window.select": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 38}, "pysapscript.window.Window.write": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 46}, "pysapscript.window.Window.read": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 34}, "pysapscript.window.Window.visualize": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 32}, "pysapscript.window.Window.read_shell_table": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 60, "bases": 0, "doc": 78}, "pysapscript.window.Window.load_shell_table": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 64, "bases": 0, "doc": 65}, "pysapscript.window.Window.press_shell_button": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 46}, "pysapscript.window.Window.change_shell_checkbox": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 55}}, "length": 46, "save": true}, "index": {"qualname": {"root": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1}}, "df": 2, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 7}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.session": {"tf": 1}, "pysapscript.window.Window.session_handle": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.start_transaction": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 4}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1}}, "df": 2}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1}, "pysapscript.window.Window.connection": {"tf": 1}, "pysapscript.window.Window.connection_handle": {"tf": 1}, "pysapscript.window.Window.session": {"tf": 1}, "pysapscript.window.Window.session_handle": {"tf": 1}, "pysapscript.window.Window.maximize": {"tf": 1}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.close_window": {"tf": 1.4142135623730951}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 24, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.start_transaction": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.AttachException": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.types.NavigateAction": {"tf": 1}, "pysapscript.types_.types.NavigateAction.enter": {"tf": 1}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 6}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1}}, "df": 1}}}, "d": {"docs": {"pysapscript.types_.types.NavigateAction.end": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pysapscript.types_.types.NavigateAction.back": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.connection": {"tf": 1}, "pysapscript.window.Window.connection_handle": {"tf": 1}}, "df": 2}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.close_window": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "x": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}}}}, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.utils.utils.kill_process": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.utils.utils.kill_process": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.connection_handle": {"tf": 1}, "pysapscript.window.Window.session_handle": {"tf": 1}}, "df": 2}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.maximize": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}}}}}}}}}}}, "fullname": {"root": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.types_": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1}}, "df": 3, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.__init__": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}, "pysapscript.types_": {"tf": 1}, "pysapscript.types_.exceptions": {"tf": 1}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}, "pysapscript.types_.types": {"tf": 1}, "pysapscript.types_.types.NavigateAction": {"tf": 1}, "pysapscript.types_.types.NavigateAction.enter": {"tf": 1}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1}, "pysapscript.utils": {"tf": 1}, "pysapscript.utils.utils": {"tf": 1}, "pysapscript.utils.utils.kill_process": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window": {"tf": 1}, "pysapscript.window.Window": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1}, "pysapscript.window.Window.connection": {"tf": 1}, "pysapscript.window.Window.connection_handle": {"tf": 1}, "pysapscript.window.Window.session": {"tf": 1}, "pysapscript.window.Window.session_handle": {"tf": 1}, "pysapscript.window.Window.maximize": {"tf": 1}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.close_window": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 46}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.utils.utils.kill_process": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 7}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.session": {"tf": 1}, "pysapscript.window.Window.session_handle": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.start_transaction": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 4}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1}}, "df": 2}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window": {"tf": 1}, "pysapscript.window.Window": {"tf": 1.4142135623730951}, "pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}, "pysapscript.window.Window.connection": {"tf": 1.4142135623730951}, "pysapscript.window.Window.connection_handle": {"tf": 1.4142135623730951}, "pysapscript.window.Window.session": {"tf": 1.4142135623730951}, "pysapscript.window.Window.session_handle": {"tf": 1.4142135623730951}, "pysapscript.window.Window.maximize": {"tf": 1.4142135623730951}, "pysapscript.window.Window.restore": {"tf": 1.4142135623730951}, "pysapscript.window.Window.close_window": {"tf": 1.7320508075688772}, "pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}, "pysapscript.window.Window.start_transaction": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press": {"tf": 1.4142135623730951}, "pysapscript.window.Window.select": {"tf": 1.4142135623730951}, "pysapscript.window.Window.write": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read": {"tf": 1.4142135623730951}, "pysapscript.window.Window.visualize": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 25, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.types_": {"tf": 1}, "pysapscript.types_.exceptions": {"tf": 1}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}, "pysapscript.types_.types": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.enter": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1.4142135623730951}}, "df": 12}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.start_transaction": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.AttachException": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.types.NavigateAction": {"tf": 1}, "pysapscript.types_.types.NavigateAction.enter": {"tf": 1}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 6}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.types_.exceptions": {"tf": 1}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 4}}}}}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1}}, "df": 1}}}, "d": {"docs": {"pysapscript.types_.types.NavigateAction.end": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pysapscript.types_.types.NavigateAction.back": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.connection": {"tf": 1}, "pysapscript.window.Window.connection_handle": {"tf": 1}}, "df": 2}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.close_window": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "x": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.utils": {"tf": 1}, "pysapscript.utils.utils": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.kill_process": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1.4142135623730951}}, "df": 4}}}}}, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.utils.utils.kill_process": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.connection_handle": {"tf": 1}, "pysapscript.window.Window.session_handle": {"tf": 1}}, "df": 2}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.maximize": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}}}}}}}}}}}, "annotation": {"root": {"docs": {}, "df": 0}}, "default_value": {"root": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1.4142135623730951}}, "df": 5, "l": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 5}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1.4142135623730951}}, "df": 1}}}, "d": {"docs": {"pysapscript.types_.types.NavigateAction.end": {"tf": 1.4142135623730951}}, "df": 1}}}, "x": {"2": {"7": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1.4142135623730951}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1.4142135623730951}}, "df": 5}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "g": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.types_.types.NavigateAction.enter": {"tf": 1}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1}}, "df": 5}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pysapscript.types_.types.NavigateAction.back": {"tf": 1.4142135623730951}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.types_.types.NavigateAction.cancel": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.types_.types.NavigateAction.save": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "signature": {"root": {"1": {"0": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}, "docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}, "2": {"0": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}, "docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}, "3": {"9": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}}, "df": 2}, "docs": {}, "df": 0}, "docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 4.47213595499958}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 10.535653752852738}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 3.1622776601683795}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 6}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 5.0990195135927845}, "pysapscript.utils.utils.kill_process": {"tf": 3.7416573867739413}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 5.291502622129181}, "pysapscript.window.Window.__init__": {"tf": 7.483314773547883}, "pysapscript.window.Window.maximize": {"tf": 3.1622776601683795}, "pysapscript.window.Window.restore": {"tf": 3.1622776601683795}, "pysapscript.window.Window.close_window": {"tf": 3.1622776601683795}, "pysapscript.window.Window.navigate": {"tf": 5.5677643628300215}, "pysapscript.window.Window.start_transaction": {"tf": 4.242640687119285}, "pysapscript.window.Window.press": {"tf": 4.242640687119285}, "pysapscript.window.Window.select": {"tf": 4.242640687119285}, "pysapscript.window.Window.write": {"tf": 5.0990195135927845}, "pysapscript.window.Window.read": {"tf": 4.47213595499958}, "pysapscript.window.Window.visualize": {"tf": 5.656854249492381}, "pysapscript.window.Window.read_shell_table": {"tf": 7}, "pysapscript.window.Window.load_shell_table": {"tf": 7.0710678118654755}, "pysapscript.window.Window.press_shell_button": {"tf": 5.0990195135927845}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 5.830951894845301}}, "df": 22, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"3": {"2": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}, "docs": {}, "df": 0}, "docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.7320508075688772}}, "df": 3, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.start_transaction": {"tf": 1}}, "df": 1}}}}}}}}}}, "o": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 2}, "pysapscript.utils.utils.kill_process": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read": {"tf": 1.4142135623730951}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 14}}, "a": {"docs": {}, "df": 0, "p": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "/": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.maximize": {"tf": 1}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.close_window": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 18}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 9}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.__init__": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}}, "df": 3}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.utils.utils.kill_process": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "x": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}, "x": {"8": {"6": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 1}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 3}}}, "y": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 1}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 5}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.__init__": {"tf": 1.4142135623730951}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 3}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 3}}}}}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript.types_.types.NavigateAction": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "doc": {"root": {"0": {"1": {"2": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {"pysapscript": {"tf": 2}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 2}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}}, "df": 3}, "1": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2}, "2": {"0": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}, "docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}, "docs": {"pysapscript": {"tf": 15.811388300841896}, "pysapscript.pysapscript": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript.__init__": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript.default_window_title": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 4.47213595499958}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 4.358898943540674}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 3.872983346207417}, "pysapscript.types_": {"tf": 1.7320508075688772}, "pysapscript.types_.exceptions": {"tf": 1.4142135623730951}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1.4142135623730951}, "pysapscript.types_.exceptions.AttachException": {"tf": 1.4142135623730951}, "pysapscript.types_.exceptions.ActionException": {"tf": 1.7320508075688772}, "pysapscript.types_.types": {"tf": 1.7320508075688772}, "pysapscript.types_.types.NavigateAction": {"tf": 1.7320508075688772}, "pysapscript.types_.types.NavigateAction.enter": {"tf": 1.7320508075688772}, "pysapscript.types_.types.NavigateAction.back": {"tf": 1.7320508075688772}, "pysapscript.types_.types.NavigateAction.end": {"tf": 1.7320508075688772}, "pysapscript.types_.types.NavigateAction.cancel": {"tf": 1.7320508075688772}, "pysapscript.types_.types.NavigateAction.save": {"tf": 1.7320508075688772}, "pysapscript.utils": {"tf": 1.7320508075688772}, "pysapscript.utils.utils": {"tf": 1.7320508075688772}, "pysapscript.utils.utils.kill_process": {"tf": 2.23606797749979}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 2.8284271247461903}, "pysapscript.window": {"tf": 1.7320508075688772}, "pysapscript.window.Window": {"tf": 1.7320508075688772}, "pysapscript.window.Window.__init__": {"tf": 1.7320508075688772}, "pysapscript.window.Window.connection": {"tf": 1.7320508075688772}, "pysapscript.window.Window.connection_handle": {"tf": 1.7320508075688772}, "pysapscript.window.Window.session": {"tf": 1.7320508075688772}, "pysapscript.window.Window.session_handle": {"tf": 1.7320508075688772}, "pysapscript.window.Window.maximize": {"tf": 1.4142135623730951}, "pysapscript.window.Window.restore": {"tf": 1.4142135623730951}, "pysapscript.window.Window.close_window": {"tf": 1.4142135623730951}, "pysapscript.window.Window.navigate": {"tf": 3.7416573867739413}, "pysapscript.window.Window.start_transaction": {"tf": 2.23606797749979}, "pysapscript.window.Window.press": {"tf": 3.7416573867739413}, "pysapscript.window.Window.select": {"tf": 3.7416573867739413}, "pysapscript.window.Window.write": {"tf": 3.872983346207417}, "pysapscript.window.Window.read": {"tf": 3.7416573867739413}, "pysapscript.window.Window.visualize": {"tf": 2.8284271247461903}, "pysapscript.window.Window.read_shell_table": {"tf": 4.358898943540674}, "pysapscript.window.Window.load_shell_table": {"tf": 3}, "pysapscript.window.Window.press_shell_button": {"tf": 3.872983346207417}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 4}}, "df": 46, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 5}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1, "n": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1, "s": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 2, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pysapscript": {"tf": 2.6457513110645907}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 3.1622776601683795}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 2}, "pysapscript.window.Window.maximize": {"tf": 1}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.close_window": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 11, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}, "\\": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "\\": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}}, "df": 2}, "z": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}}}, "q": {"4": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1, "s": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 2.23606797749979}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}}, "df": 3}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1, "s": {"docs": {"pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 2}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript": {"tf": 1.7320508075688772}, "pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 1.7320508075688772}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.7320508075688772}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 3, "s": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 2}, "pysapscript.utils.utils.kill_process": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 13}}, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1}}}}, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.types_.types.NavigateAction": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 8}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript": {"tf": 2}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}}, "df": 4}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript": {"tf": 1}}, "df": 1, "s": {"docs": {"pysapscript": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.7320508075688772}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 2}}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.utils.utils.kill_process": {"tf": 2}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {"pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 10}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1}, "d": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1}, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.types_.exceptions.AttachException": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "n": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1, "d": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}}, "df": 4}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 2}}}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.kill_process": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 16}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 2}}, "s": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 2}}, "s": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 3, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 4}}, "f": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 4}, "t": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 2, "s": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1, "s": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 4}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"pysapscript": {"tf": 1}}, "df": 1, "r": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.7320508075688772}}, "df": 2}, "d": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}, "p": {"docs": {"pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1.4142135623730951}}, "df": 1}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}}}}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 3}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {"pysapscript.types_.exceptions.ActionException": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.press": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 2, "s": {"docs": {"pysapscript.window.Window.close_window": {"tf": 1}}, "df": 1}}}}}, ":": {"docs": {}, "df": 0, "\\": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 2.23606797749979}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}}, "df": 3}}}}}}}, "t": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "[": {"1": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}}}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "x": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 2.23606797749979}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "x": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 2}}, "s": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}, "r": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}}, "df": 3}, "f": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1.4142135623730951}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1.7320508075688772}}, "df": 5}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript": {"tf": 3.605551275463989}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 2.8284271247461903}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 3.4641016151377544}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.types_.types.NavigateAction": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1.7320508075688772}, "pysapscript.window.Window.maximize": {"tf": 1}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.close_window": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 19, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}, "s": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.types_.exceptions.AttachException": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.write": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "[": {"0": {"docs": {"pysapscript": {"tf": 1}}, "df": 1, "]": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"0": {"3": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"0": {"3": {"docs": {"pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}}}}}}}}}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}}}}}}}}}}}}, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "v": {"docs": {"pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "2": {"docs": {}, "df": 0, "]": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "[": {"0": {"docs": {}, "df": 0, "]": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "[": {"1": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}}}}, "docs": {}, "df": 0}}}}}}}}, "docs": {}, "df": 0}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}}, "df": 2, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2}}}, "y": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}}, "df": 3, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1.7320508075688772}}, "df": 3}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 3}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.window.Window.start_transaction": {"tf": 1.7320508075688772}}, "df": 2}}}}}}}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.7320508075688772}, "pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1.7320508075688772}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.load_shell_table": {"tf": 1.7320508075688772}}, "df": 13, "o": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 3.3166247903554}, "pysapscript.window.Window.load_shell_table": {"tf": 2.449489742783178}, "pysapscript.window.Window.press_shell_button": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 5}}, "s": {"docs": {"pysapscript.window.Window.select": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.quit": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1.7320508075688772}, "pysapscript.window.Window.load_shell_table": {"tf": 1.7320508075688772}}, "df": 6, "n": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.maximize": {"tf": 1}, "pysapscript.window.Window.close_window": {"tf": 1}}, "df": 3}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.types_.exceptions": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.types_.types.NavigateAction": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.window.Window.write": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 2}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 2.6457513110645907}, "pysapscript.window.Window.press": {"tf": 2}, "pysapscript.window.Window.select": {"tf": 2}, "pysapscript.window.Window.write": {"tf": 2}, "pysapscript.window.Window.read": {"tf": 1.7320508075688772}, "pysapscript.window.Window.visualize": {"tf": 2}, "pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 1.4142135623730951}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1.4142135623730951}}, "df": 10, "s": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 11}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.types_.exceptions": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.types_.exceptions.AttachException": {"tf": 1}, "pysapscript.types_.exceptions.ActionException": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 11}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.7320508075688772}}, "df": 1}}}, "d": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 2}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}, "d": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1.7320508075688772}, "pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 3, "s": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 3.1622776601683795}}, "df": 1}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1.7320508075688772}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript": {"tf": 1.4142135623730951}}, "df": 1}}}}, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {"pysapscript": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}}, "w": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 3, "s": {"docs": {"pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1.7320508075688772}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}}, "d": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.visualize": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 14}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2}}}}}}, "x": {"8": {"6": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 2, "s": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}}, "df": 1}}}, "z": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}}, "df": 1, "s": {"docs": {"pysapscript.window.Window.maximize": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}}, "df": 1}}}}}}}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}, "pysapscript.types_.exceptions.WindowDidNotAppearException": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}, "pysapscript.window.Window.press": {"tf": 1}, "pysapscript.window.Window.select": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1}, "pysapscript.window.Window.read": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 12}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {"pysapscript.window.Window.select": {"tf": 1.4142135623730951}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 2}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 2, "t": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 5}, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.utils.utils.kill_process": {"tf": 1.4142135623730951}, "pysapscript.window.Window.start_transaction": {"tf": 1}, "pysapscript.window.Window.press_shell_button": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 5}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.types_.types.NavigateAction": {"tf": 1}, "pysapscript.window.Window.navigate": {"tf": 1}}, "df": 3, "s": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.7320508075688772}}, "df": 3}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1.7320508075688772}, "pysapscript.utils.utils.wait_for_window_title": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 1.4142135623730951}}, "df": 3}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript": {"tf": 1}, "pysapscript.window.Window.write": {"tf": 1.7320508075688772}, "pysapscript.window.Window.read": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.visualize": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.load_shell_table": {"tf": 1}}, "df": 1}}}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1.4142135623730951}, "pysapscript.window.Window.press_shell_button": {"tf": 2.23606797749979}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pysapscript.pysapscript.Sapscript.launch_sap": {"tf": 1.4142135623730951}, "pysapscript.window.Window.read_shell_table": {"tf": 1}, "pysapscript.window.Window.change_shell_checkbox": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {"pysapscript.pysapscript.Sapscript.attach_window": {"tf": 1}, "pysapscript.utils.utils.kill_process": {"tf": 1}, "pysapscript.window.Window.load_shell_table": {"tf": 2}}, "df": 3}, "e": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1.7320508075688772}}, "df": 1, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pysapscript.utils.utils.wait_for_window_title": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.window.Window.restore": {"tf": 1}, "pysapscript.window.Window.read_shell_table": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pysapscript.window.Window.navigate": {"tf": 1.4142135623730951}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {"pysapscript.window.Window.read_shell_table": {"tf": 1}}, "df": 1}}}, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.quit": {"tf": 1}, "pysapscript.utils.utils.kill_process": {"tf": 1}}, "df": 2}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pysapscript.pysapscript.Sapscript.open_new_window": {"tf": 1}}, "df": 1}}}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true}; - - // mirrored in build-search-index.js (part 1) - // Also split on html tags. this is a cheap heuristic, but good enough. - elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/); - - let searchIndex; - if (docs._isPrebuiltIndex) { - console.info("using precompiled search index"); - searchIndex = elasticlunr.Index.load(docs); - } else { - console.time("building search index"); - // mirrored in build-search-index.js (part 2) - searchIndex = elasticlunr(function () { - this.pipeline.remove(elasticlunr.stemmer); - this.pipeline.remove(elasticlunr.stopWordFilter); - this.addField("qualname"); - this.addField("fullname"); - this.addField("annotation"); - this.addField("default_value"); - this.addField("signature"); - this.addField("bases"); - this.addField("doc"); - this.setRef("fullname"); - }); - for (let doc of docs) { - searchIndex.addDoc(doc); - } - console.timeEnd("building search index"); - } - - return (term) => searchIndex.search(term, { - fields: { - qualname: {boost: 4}, - fullname: {boost: 2}, - annotation: {boost: 2}, - default_value: {boost: 2}, - signature: {boost: 2}, - bases: {boost: 2}, - doc: {boost: 1}, - }, - expand: true - }); -})(); \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index b8584ff..8b3adbf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,289 +1,348 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.0 and should not be changed by hand. [[package]] -name = "astunparse" -version = "1.6.3" -description = "An AST unparser for Python" +name = "importlib-metadata" +version = "7.1.0" +description = "Read metadata from Python packages" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, - {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] [package.dependencies] -six = ">=1.6.1,<2.0" -wheel = ">=0.23.0,<1.0" +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." +name = "mako" +version = "1.3.2" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Mako-1.3.2-py3-none-any.whl", hash = "sha256:32a99d70754dfce237019d17ffe4a282d2d3351b9c476e90d8a60e63f133b80c"}, + {file = "Mako-1.3.2.tar.gz", hash = "sha256:2a0c8ad7f6274271b3bb7467dd37cf9cc6dab4bc19cb69a4ef10669402de698e"}, ] [package.dependencies] -MarkupSafe = ">=2.0" +MarkupSafe = ">=0.9.2" [package.extras] -i18n = ["Babel (>=2.7)"] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] [[package]] -name = "markupsafe" -version = "2.1.3" -description = "Safely add untrusted strings to HTML/XML markup." +name = "markdown" +version = "3.6" +description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] -name = "numpy" -version = "1.24.4" -description = "Fundamental package for array computing in Python" +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, - {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, - {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, - {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, - {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, - {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, - {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, - {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, - {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, - {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, - {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "numpy" -version = "1.26.2" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, - {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, - {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, - {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, - {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, - {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, - {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, - {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, - {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, - {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, - {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] name = "pandas" -version = "2.0.3" +version = "2.2.1" description = "Powerful data structures for data analysis, time series, and statistics" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, - {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, - {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, - {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, - {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, - {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, - {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, - {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, - {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, - {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, - {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, + {file = "pandas-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8df8612be9cd1c7797c93e1c5df861b2ddda0b48b08f2c3eaa0702cf88fb5f88"}, + {file = "pandas-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0f573ab277252ed9aaf38240f3b54cfc90fff8e5cab70411ee1d03f5d51f3944"}, + {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f02a3a6c83df4026e55b63c1f06476c9aa3ed6af3d89b4f04ea656ccdaaaa359"}, + {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c38ce92cb22a4bea4e3929429aa1067a454dcc9c335799af93ba9be21b6beb51"}, + {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c2ce852e1cf2509a69e98358e8458775f89599566ac3775e70419b98615f4b06"}, + {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53680dc9b2519cbf609c62db3ed7c0b499077c7fefda564e330286e619ff0dd9"}, + {file = "pandas-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:94e714a1cca63e4f5939cdce5f29ba8d415d85166be3441165edd427dc9f6bc0"}, + {file = "pandas-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f821213d48f4ab353d20ebc24e4faf94ba40d76680642fb7ce2ea31a3ad94f9b"}, + {file = "pandas-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70e00c2d894cb230e5c15e4b1e1e6b2b478e09cf27cc593a11ef955b9ecc81a"}, + {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97fbb5387c69209f134893abc788a6486dbf2f9e511070ca05eed4b930b1b02"}, + {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101d0eb9c5361aa0146f500773395a03839a5e6ecde4d4b6ced88b7e5a1a6403"}, + {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7d2ed41c319c9fb4fd454fe25372028dfa417aacb9790f68171b2e3f06eae8cd"}, + {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5d3c00557d657c8773ef9ee702c61dd13b9d7426794c9dfeb1dc4a0bf0ebc7"}, + {file = "pandas-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:06cf591dbaefb6da9de8472535b185cba556d0ce2e6ed28e21d919704fef1a9e"}, + {file = "pandas-2.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:88ecb5c01bb9ca927ebc4098136038519aa5d66b44671861ffab754cae75102c"}, + {file = "pandas-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f6ec3baec203c13e3f8b139fb0f9f86cd8c0b94603ae3ae8ce9a422e9f5bee"}, + {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a935a90a76c44fe170d01e90a3594beef9e9a6220021acfb26053d01426f7dc2"}, + {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c391f594aae2fd9f679d419e9a4d5ba4bce5bb13f6a989195656e7dc4b95c8f0"}, + {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9d1265545f579edf3f8f0cb6f89f234f5e44ba725a34d86535b1a1d38decbccc"}, + {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11940e9e3056576ac3244baef2fedade891977bcc1cb7e5cc8f8cc7d603edc89"}, + {file = "pandas-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4acf681325ee1c7f950d058b05a820441075b0dd9a2adf5c4835b9bc056bf4fb"}, + {file = "pandas-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9bd8a40f47080825af4317d0340c656744f2bfdb6819f818e6ba3cd24c0e1397"}, + {file = "pandas-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df0c37ebd19e11d089ceba66eba59a168242fc6b7155cba4ffffa6eccdfb8f16"}, + {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:739cc70eaf17d57608639e74d63387b0d8594ce02f69e7a0b046f117974b3019"}, + {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d3558d263073ed95e46f4650becff0c5e1ffe0fc3a015de3c79283dfbdb3df"}, + {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4aa1d8707812a658debf03824016bf5ea0d516afdea29b7dc14cf687bc4d4ec6"}, + {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:76f27a809cda87e07f192f001d11adc2b930e93a2b0c4a236fde5429527423be"}, + {file = "pandas-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:1ba21b1d5c0e43416218db63037dbe1a01fc101dc6e6024bcad08123e48004ab"}, + {file = "pandas-2.2.1.tar.gz", hash = "sha256:0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572"}, ] [package.dependencies] numpy = [ - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" -tzdata = ">=2022.1" +tzdata = ">=2022.7" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.6.3)"] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] -name = "pdoc" -version = "14.3.0" -description = "API Documentation for Python Projects" +name = "pdoc3" +version = "0.10.0" +description = "Auto-generate API documentation for Python projects." optional = false -python-versions = ">=3.8" +python-versions = ">= 3.6" files = [ - {file = "pdoc-14.3.0-py3-none-any.whl", hash = "sha256:9a8f9a48bda5a99c249367c2b99779dbdd9f4a56f905068c9c2d6868dbae6882"}, - {file = "pdoc-14.3.0.tar.gz", hash = "sha256:40bf8f092fcd91560d5e6cebb7c21b65df699f90a468c8ea316235c3368d5449"}, + {file = "pdoc3-0.10.0-py3-none-any.whl", hash = "sha256:ba45d1ada1bd987427d2bf5cdec30b2631a3ff5fb01f6d0e77648a572ce6028b"}, + {file = "pdoc3-0.10.0.tar.gz", hash = "sha256:5f22e7bcb969006738e1aa4219c75a32f34c2d62d46dc9d2fb2d3e0b0287e4b7"}, ] [package.dependencies] -astunparse = {version = "*", markers = "python_version < \"3.9\""} -Jinja2 = ">=2.11.0" -MarkupSafe = "*" -pygments = ">=2.12.0" +mako = "*" +markdown = ">=3.0" + +[[package]] +name = "polars" +version = "0.20.16" +description = "Blazingly fast DataFrame library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "polars-0.20.16-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7530148621b541221b8a36cfad27cc576d77c0739e82d8383ee3a699935a5f63"}, + {file = "polars-0.20.16-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:92241d9aeb29de7c503d3b4f9191181f0831dd546ee6770e5c6fae3cead98edb"}, + {file = "polars-0.20.16-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b48593c44a20f09f1eb1449ea43e2e5a4adf3c82faf1fba797fb7364cfa2ca4"}, + {file = "polars-0.20.16-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:0c504cfdc88f3e4262d5ecf637c10ae154565b94250ee4263a9f5f346397cf98"}, + {file = "polars-0.20.16-cp38-abi3-win_amd64.whl", hash = "sha256:a1fa24ea374ff05766e43fe2f079d62edd682ade19e3e2d68526e9c7a3e23ddf"}, + {file = "polars-0.20.16.tar.gz", hash = "sha256:7a9ebb85bfc9dd964490612b6fee2afbde91eee6bfaa590b731c7868d225210b"}, +] [package.extras] -dev = ["hypothesis", "mypy", "pdoc-pyo3-sample-library (==1.0.11)", "pygments (>=2.14.0)", "pytest", "pytest-cov", "pytest-timeout", "ruff", "tox", "types-pygments"] +adbc = ["adbc-driver-manager", "adbc-driver-sqlite"] +all = ["polars[adbc,cloudpickle,connectorx,deltalake,fastexcel,fsspec,gevent,numpy,pandas,plot,pyarrow,pydantic,pyiceberg,sqlalchemy,timezone,xlsx2csv,xlsxwriter]"] +cloudpickle = ["cloudpickle"] +connectorx = ["connectorx (>=0.3.2)"] +deltalake = ["deltalake (>=0.14.0)"] +fastexcel = ["fastexcel (>=0.9)"] +fsspec = ["fsspec"] +gevent = ["gevent"] +matplotlib = ["matplotlib"] +numpy = ["numpy (>=1.16.0)"] +openpyxl = ["openpyxl (>=3.0.0)"] +pandas = ["pandas", "pyarrow (>=7.0.0)"] +plot = ["hvplot (>=0.9.1)"] +pyarrow = ["pyarrow (>=7.0.0)"] +pydantic = ["pydantic"] +pyiceberg = ["pyiceberg (>=0.5.0)"] +pyxlsb = ["pyxlsb (>=1.0)"] +sqlalchemy = ["pandas", "sqlalchemy"] +timezone = ["backports-zoneinfo", "tzdata"] +xlsx2csv = ["xlsx2csv (>=0.8.0)"] +xlsxwriter = ["xlsxwriter"] [[package]] -name = "pygments" -version = "2.17.2" -description = "Pygments is a syntax highlighting package written in Python." +name = "pyarrow" +version = "15.0.2" +description = "Python library for Apache Arrow" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pyarrow-15.0.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:88b340f0a1d05b5ccc3d2d986279045655b1fe8e41aba6ca44ea28da0d1455d8"}, + {file = "pyarrow-15.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eaa8f96cecf32da508e6c7f69bb8401f03745c050c1dd42ec2596f2e98deecac"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23c6753ed4f6adb8461e7c383e418391b8d8453c5d67e17f416c3a5d5709afbd"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f639c059035011db8c0497e541a8a45d98a58dbe34dc8fadd0ef128f2cee46e5"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:290e36a59a0993e9a5224ed2fb3e53375770f07379a0ea03ee2fce2e6d30b423"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06c2bb2a98bc792f040bef31ad3e9be6a63d0cb39189227c08a7d955db96816e"}, + {file = "pyarrow-15.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:f7a197f3670606a960ddc12adbe8075cea5f707ad7bf0dffa09637fdbb89f76c"}, + {file = "pyarrow-15.0.2-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:5f8bc839ea36b1f99984c78e06e7a06054693dc2af8920f6fb416b5bca9944e4"}, + {file = "pyarrow-15.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5e81dfb4e519baa6b4c80410421528c214427e77ca0ea9461eb4097c328fa33"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a4f240852b302a7af4646c8bfe9950c4691a419847001178662a98915fd7ee7"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e7d9cfb5a1e648e172428c7a42b744610956f3b70f524aa3a6c02a448ba853e"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2d4f905209de70c0eb5b2de6763104d5a9a37430f137678edfb9a675bac9cd98"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90adb99e8ce5f36fbecbbc422e7dcbcbed07d985eed6062e459e23f9e71fd197"}, + {file = "pyarrow-15.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:b116e7fd7889294cbd24eb90cd9bdd3850be3738d61297855a71ac3b8124ee38"}, + {file = "pyarrow-15.0.2-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:25335e6f1f07fdaa026a61c758ee7d19ce824a866b27bba744348fa73bb5a440"}, + {file = "pyarrow-15.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:90f19e976d9c3d8e73c80be84ddbe2f830b6304e4c576349d9360e335cd627fc"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a22366249bf5fd40ddacc4f03cd3160f2d7c247692945afb1899bab8a140ddfb"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2a335198f886b07e4b5ea16d08ee06557e07db54a8400cc0d03c7f6a22f785f"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e6d459c0c22f0b9c810a3917a1de3ee704b021a5fb8b3bacf968eece6df098f"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:033b7cad32198754d93465dcfb71d0ba7cb7cd5c9afd7052cab7214676eec38b"}, + {file = "pyarrow-15.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:29850d050379d6e8b5a693098f4de7fd6a2bea4365bfd073d7c57c57b95041ee"}, + {file = "pyarrow-15.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:7167107d7fb6dcadb375b4b691b7e316f4368f39f6f45405a05535d7ad5e5058"}, + {file = "pyarrow-15.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e85241b44cc3d365ef950432a1b3bd44ac54626f37b2e3a0cc89c20e45dfd8bf"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:248723e4ed3255fcd73edcecc209744d58a9ca852e4cf3d2577811b6d4b59818"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ff3bdfe6f1b81ca5b73b70a8d482d37a766433823e0c21e22d1d7dde76ca33f"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f3d77463dee7e9f284ef42d341689b459a63ff2e75cee2b9302058d0d98fe142"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:8c1faf2482fb89766e79745670cbca04e7018497d85be9242d5350cba21357e1"}, + {file = "pyarrow-15.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:28f3016958a8e45a1069303a4a4f6a7d4910643fc08adb1e2e4a7ff056272ad3"}, + {file = "pyarrow-15.0.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:89722cb64286ab3d4daf168386f6968c126057b8c7ec3ef96302e81d8cdb8ae4"}, + {file = "pyarrow-15.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd0ba387705044b3ac77b1b317165c0498299b08261d8122c96051024f953cd5"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2459bf1f22b6a5cdcc27ebfd99307d5526b62d217b984b9f5c974651398832"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58922e4bfece8b02abf7159f1f53a8f4d9f8e08f2d988109126c17c3bb261f22"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:adccc81d3dc0478ea0b498807b39a8d41628fa9210729b2f718b78cb997c7c91"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:8bd2baa5fe531571847983f36a30ddbf65261ef23e496862ece83bdceb70420d"}, + {file = "pyarrow-15.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6669799a1d4ca9da9c7e06ef48368320f5856f36f9a4dd31a11839dda3f6cc8c"}, + {file = "pyarrow-15.0.2.tar.gz", hash = "sha256:9c9bc803cb3b7bfacc1e96ffbfd923601065d9d3f911179d81e72d99fd74a3d9"}, ] -[package.extras] -plugins = ["importlib-metadata"] -windows-terminal = ["colorama (>=0.4.6)"] +[package.dependencies] +numpy = ">=1.16.6,<2" [[package]] name = "python-dateutil" @@ -356,20 +415,21 @@ files = [ ] [[package]] -name = "wheel" -version = "0.42.0" -description = "A built-package format for Python" +name = "zipp" +version = "3.18.1" +description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "wheel-0.42.0-py3-none-any.whl", hash = "sha256:177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d"}, - {file = "wheel-0.42.0.tar.gz", hash = "sha256:c45be39f7882c9d34243236f2d63cbd58039e360f85d0913425fbd7ceea617a8"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] -test = ["pytest (>=6.0.0)", "setuptools (>=65)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "edccbb45eabd6e26a38570364bc7b3ceaed13fdaf53acce807c907b74618b02c" +python-versions = "^3.9" +content-hash = "6cbfe0237eefe98dc6fe519bbdab93fe8cdb065cd32b6e2cf1e935bca255a31b" diff --git a/pyproject.toml b/pyproject.toml index f067e6a..8e6dcf9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,14 +16,18 @@ Documentation = "https://kamildemocko.github.io/pysapscript/" [tool.poetry] name = "pysapscript" -version = "2.4.0" +version = "3.0.0" description = "Automate SAP with python!" authors = ["Kamil Democko "] readme = "README.md" [tool.poetry.dependencies] -python = "^3.8" -pandas = "^2.0.0" +python = "^3.9" pywin32 = "^306" -pdoc = "^14.3.0" +polars = "^0.20.16" +pyarrow = "^15.0.2" + +[tool.poetry.group.dev.dependencies] +pandas = "^2.2.1" +pdoc3 = "^0.10.0" diff --git a/pysapscript/__init__.py b/pysapscript/__init__.py index 13f9cb0..1f4512b 100644 --- a/pysapscript/__init__.py +++ b/pysapscript/__init__.py @@ -4,4 +4,6 @@ from .pysapscript import Sapscript from .window import Window -from .window import NavigateAction \ No newline at end of file +from .shell_table import ShellTable +from .types_.types import NavigateAction +from .types_ import exceptions diff --git a/pysapscript/pysapscript.py b/pysapscript/pysapscript.py index c7323e7..e25a141 100644 --- a/pysapscript/pysapscript.py +++ b/pysapscript/pysapscript.py @@ -11,15 +11,31 @@ class Sapscript: - def __init__(self, default_window_title: str = "SAP Easy Access"): + def __init__(self, default_window_title: str = "SAP Easy Access") -> None: + """ + Args: + default_window_title (str): default SAP window title + + Example: + sapscript = Sapscript() + main_window = sapscript.attach_window(0, 0) + main_window.write("wnd[0]/tbar[0]/okcd", "ZLOGON") + main_window.press("wnd[0]/tbar[0]/btn[0]") + """ self._sap_gui_auto = None self._application = None self.default_window_title = default_window_title + def __repr__(self) -> str: + return f"Sapscript(default_window_title={self.default_window_title})" + + def __str__(self) -> str: + return f"Sapscript(default_window_title={self.default_window_title})" + def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui"), sid: str, client: str, user: str, password: str, - maximise: bool = True, quit_auto: bool = True): + maximise: bool = True, quit_auto: bool = True) -> None: """ Launches SAP and waits for it to load @@ -45,7 +61,6 @@ def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\F ) ``` """ - self._launch( root_sap_dir, sid, @@ -59,11 +74,10 @@ def launch_sap(self, *, root_sap_dir: Path = Path(r"C:\Program Files (x86)\SAP\F if quit_auto: atexit.register(self.quit) - def quit(self): + def quit(self) -> None: """ Tries to close the sap normal way (from main window), then kills the process """ - try: main_window = self.attach_window(0, 0) main_window.select("wnd[0]/mbar/menu[4]/menu[12]") @@ -95,7 +109,6 @@ def attach_window(self, connection: int, session: int) -> window.Window: main_window = pss.attach_window(0, 0) ``` """ - if not isinstance(connection, int): raise AttributeError("Wrong connection argument!") @@ -127,7 +140,7 @@ def attach_window(self, connection: int, session: int) -> window.Window: session_handle=session_handle, ) - def open_new_window(self, window_to_handle_opening: window.Window): + def open_new_window(self, window_to_handle_opening: window.Window) -> None: """ Opens new sap window @@ -147,13 +160,12 @@ def open_new_window(self, window_to_handle_opening: window.Window): pss.open_new_window(main_window) ``` """ - window_to_handle_opening.session_handle.createSession() utils.wait_for_window_title(self.default_window_title) def _launch(self, working_dir: Path, sid: str, client: str, - user: str, password: str, maximise: bool): + user: str, password: str, maximise: bool) -> None: """ launches sap from sapshcut.exe """ diff --git a/pysapscript/shell_table.py b/pysapscript/shell_table.py new file mode 100644 index 0000000..b4204a4 --- /dev/null +++ b/pysapscript/shell_table.py @@ -0,0 +1,299 @@ +from typing import Self, Any, ClassVar +from typing import overload + +import win32com.client +from win32com.universal import com_error +import polars as pl +import pandas + +from pysapscript.types_ import exceptions + + +class ShellTable: + """ + A class representing a shell table + """ + + def __init__(self, session_handle: win32com.client.CDispatch, element: str, load_table: bool = True) -> None: + """ + Args: + session_handle (win32com.client.CDispatch): SAP session handle + element (str): SAP table element + load_table (bool): loads table if True, default True + + Raises: + ActionException: error reading table data + """ + self.table_element = element + self._session_handle = session_handle + self.data = self._read_shell_table(load_table) + self.rows = self.data.shape[0] + self.columns = self.data.shape[1] + + def __repr__(self) -> str: + return repr(self.data) + + def __str__(self) -> str: + return str(self.data) + + def __eq__(self, other: object) -> bool: + return self.data == other + + def __hash__(self) -> hash: + return hash(f"{self._session_handle}{self.table_element}{self.data.shape}") + + def __getitem__(self, item) -> dict[str, Any] | list[dict[str, Any]]: + if isinstance(item, int): + return self.data.row(item, named=True) + elif isinstance(item, slice): + if item.step is not None: + raise NotImplementedError("Step is not supported") + + sl = self.data.slice(item.start, item.stop - item.start) + return sl.to_dicts() + else: + raise ValueError("Incorrect type of index") + + def __iter__(self) -> Self: + return ShellTableRowIterator(self.data) + + def _read_shell_table(self, load_table: bool = True) -> pl.DataFrame: + """ + Reads table of shell table + + If the table is too big, the SAP will not render all the data. + Default is to load table before reading it + + Args: + load_table (bool): whether to load table before reading + + Returns: + pandas.DataFrame: table data + + Raises: + ActionException: Error reading table + + Example: + ``` + table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell") + ``` + """ + try: + shell = self._session_handle.findById(self.table_element) + + columns = shell.ColumnOrder + rows_count = shell.RowCount + + if rows_count == 0: + return pl.DataFrame() + + if load_table: + self.load() + + data = [ + {column: shell.GetCellValue(i, column) for column in columns} + for i in range(rows_count) + ] + + return pl.DataFrame(data) + + except Exception as ex: + raise exceptions.ActionException(f"Error reading element {self.table_element}: {ex}") + + def to_polars_dataframe(self) -> pl.DataFrame: + """ + Get table data as a polars DataFrame + + Returns: + polars.DataFrame: table data + """ + return self.data + + def to_pandas_dataframe(self) -> pandas.DataFrame: + """ + Get table data as a pandas DataFrame + + Returns: + pandas.DataFrame: table data + """ + return self.data.to_pandas() + + def to_dict(self) -> dict[str, Any]: + """ + Get table data as a dictionary + + Returns: + dict[str, Any]: table data in named dictionary - column names as keys + """ + return self.data.to_dict(as_series=False) + + def to_dicts(self) -> list[dict[str, Any]]: + """ + Get table data as a list of dictionaries + + Returns: + list[dict[str, Any]]: table data in list of named dictionaries - rows + """ + return self.data.to_dicts() + + def get_column_names(self) -> list[str]: + """ + Get column names + + Returns: + list[str]: column names in the table + """ + return self.data.columns + + @overload + def cell(self, row: int, column: int) -> Any: + ... + + @overload + def cell(self, row: int, column: str) -> Any: + ... + + def cell(self, row: int, column: str | int) -> Any: + """ + Get cell value + + Args: + row (int): row index + column (str | int): column name or index + + Returns: + Any: cell value + """ + return self.data.item(row, column) + + def load(self, move_by: int = 20, move_by_table_end: int = 2) -> None: + """ + Skims through the table to load all data, as SAP only loads visible data + + Args: + move_by (int): number of rows to move by, default 20 + move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2 + + Raises: + ActionException: error finding table + """ + row_position = 0 + + try: + shell = self._session_handle.findById(self.table_element) + + except Exception as e: + raise exceptions.ActionException( + f"Error finding table {self.table_element}: {e}" + ) + + while True: + try: + shell.currentCellRow = row_position + shell.SelectedRows = row_position + + except com_error: + """no more rows for this step""" + break + + row_position += move_by + + row_position -= 20 + while True: + try: + shell.currentCellRow = row_position + shell.SelectedRows = row_position + + except com_error: + """no more rows for this step""" + break + + row_position += move_by_table_end + + def press_button(self, button: str) -> None: + """ + Presses button that is in a shell table + + Args: + button (str): button name + + Raises: + ActionException: error pressing shell button + + Example: + ``` + main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN") + ``` + """ + try: + self._session_handle.findById(self.table_element).pressButton(button) + + except Exception as e: + raise exceptions.ActionException(f"Error pressing button {button}: {e}") + + def select_rows(self, indexes: list[int]) -> None: + """ + Presses button that is in a shell table + + Args: + indexes (list[int]): indexes of rows to select, starting with 0 + + Raises: + ActionException: error selecting shell rows + + Example: + ``` + main_window.select_shell_rows("wnd[0]/usr/shellContent/shell", [0, 1, 2]) + ``` + """ + try: + value = ",".join([str(n) for n in indexes]) + self._session_handle.findById(self.table_element).selectedRows = value + + except Exception as e: + raise exceptions.ActionException( + f"Error selecting rows with indexes {indexes}: {e}" + ) + + def change_checkbox(self, checkbox: str, flag: bool) -> None: + """ + Sets checkbox in a shell table + + Args: + checkbox (str): checkbox name + flag (bool): True for checked, False for unchecked + + Raises: + ActionException: error setting shell checkbox + + Example: + ``` + main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True) + ``` + """ + try: + self._session_handle.findById(self.table_element).changeCheckbox(checkbox, "1", flag) + + except Exception as e: + raise exceptions.ActionException(f"Error setting element {self.table_element}: {e}") + + +class ShellTableRowIterator: + """ + Iterator for shell table rows + """ + def __init__(self, data: pl.DataFrame) -> None: + self.data = data + self.index = 0 + + def __iter__(self) -> Self: + return self + + def __next__(self) -> dict[str, Any]: + if self.index >= self.data.shape[0]: + raise StopIteration + + value = self.data.row(self.index, named=True) + self.index += 1 + + return value diff --git a/pysapscript/window.py b/pysapscript/window.py index 6310998..33455b9 100644 --- a/pysapscript/window.py +++ b/pysapscript/window.py @@ -1,11 +1,10 @@ from time import sleep import win32com.client -import pandas -from win32com.universal import com_error from pysapscript.types_ import exceptions from pysapscript.types_.types import NavigateAction +from pysapscript.shell_table import ShellTable class Window: @@ -15,34 +14,46 @@ def __init__( connection_handle: win32com.client.CDispatch, session: int, session_handle: win32com.client.CDispatch, - ): + ) -> None: self.connection = connection self.connection_handle = connection_handle self.session = session self.session_handle = session_handle - def maximize(self): + def __repr__(self) -> str: + return f"Window(connection={self.connection}, session={self.session})" + + def __str__(self) -> str: + return f"Window(connection={self.connection}, session={self.session})" + + def __eq__(self, other: object) -> bool: + if isinstance(other, Window): + return self.connection == other.connection and self.session == other.session + + return False + + def __hash__(self) -> hash: + return hash(f"{self.connection_handle}{self.session_handle}") + + def maximize(self) -> None: """ Maximizes this sap window """ - self.session_handle.findById("wnd[0]").maximize() - def restore(self): + def restore(self) -> None: """ Restores sap window to its default size, resp. before maximization """ - self.session_handle.findById("wnd[0]").restore() - def close_window(self): + def close_window(self) -> None: """ Closes this sap window """ - self.session_handle.findById("wnd[0]").close() - def navigate(self, action: NavigateAction): + def navigate(self, action: NavigateAction) -> None: """ Navigates SAP: enter, back, end, cancel, save @@ -57,7 +68,6 @@ def navigate(self, action: NavigateAction): main_window.navigate(NavigateAction.enter) ``` """ - if action == NavigateAction.enter: el = "wnd[0]/tbar[0]/btn[0]" elif action == NavigateAction.back: @@ -73,18 +83,17 @@ def navigate(self, action: NavigateAction): self.session_handle.findById(el).press() - def start_transaction(self, transaction: str): + def start_transaction(self, transaction: str) -> None: """ Starts transaction Args: transaction (str): transaction name """ - self.write("wnd[0]/tbar[0]/okcd", transaction) self.navigate(NavigateAction.enter) - def press(self, element: str): + def press(self, element: str) -> None: """ Presses element @@ -99,14 +108,13 @@ def press(self, element: str): main_window.press("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03") ``` """ - try: self.session_handle.findById(element).press() except Exception as ex: raise exceptions.ActionException(f"Error clicking element {element}: {ex}") - def select(self, element: str): + def select(self, element: str) -> None: """ Selects element or menu item @@ -121,14 +129,13 @@ def select(self, element: str): main_window.select("wnd[2]/tbar[0]/btn[1]") ``` """ - try: self.session_handle.findById(element).select() except Exception as ex: raise exceptions.ActionException(f"Error clicking element {element}: {ex}") - def set_checkbox(self, element: str, selected: bool): + def set_checkbox(self, element: str, selected: bool) -> None: """ Selects checkbox element @@ -144,14 +151,13 @@ def set_checkbox(self, element: str, selected: bool): main_window.set_checkbox("wnd[0]/usr/chkPA_CHCK", True) ``` """ - try: self.session_handle.findById(element).selected = selected except Exception as ex: raise exceptions.ActionException(f"Error clicking element {element}: {ex}") - def write(self, element: str, text: str): + def write(self, element: str, text: str) -> None: """ Sets text property of an element @@ -167,7 +173,6 @@ def write(self, element: str, text: str): main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE") ``` """ - try: self.session_handle.findById(element).text = text @@ -191,14 +196,13 @@ def read(self, element: str) -> str: value = main_window.read("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03") ``` """ - try: return self.session_handle.findById(element).text except Exception as e: raise exceptions.ActionException(f"Error reading element {element}: {e}") - def visualize(self, element: str, seconds: int = 1): + def visualize(self, element: str, seconds: int = 1) -> None: """ draws red frame around the element @@ -225,7 +229,7 @@ def send_v_key( *, focus_element: str | None = None, value: int = 0, - ): + ) -> None: """ Sends VKey to the window, this works for certaion fields If more elements are present, optional focus_element can be used to focus on one of them. @@ -244,7 +248,6 @@ def send_v_key( window.send_v_key(focus_element="wnd[0]/usr/ctxtCITYC-LOW", value=4) ``` """ - try: if focus_element is not None: self.session_handle.findById(focus_element).SetFocus() @@ -282,169 +285,23 @@ def read_html_viewer(self, element: str) -> str: except Exception as e: raise exceptions.ActionException(f"Error reading element {element}: {e}") - def read_shell_table( - self, element: str, load_table: bool = True - ) -> pandas.DataFrame: + def read_shell_table(self, element: str, load_table: bool = True) -> ShellTable: """ - Reads table of shell table - - If the table is too big, the SAP will not render all the data. - Default is to load table before reading it - + Read the table of the specified ShellTable element. Args: - element (str): table element - load_table (bool): whether to load table before reading + element (str): The identifier of the element to read. + load_table (bool): Whether to load the table data. Default True Returns: - pandas.DataFrame: table data - - Raises: - ActionException: Error reading table - - Example: - ``` - table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell") - ``` - """ - - try: - shell = self.session_handle.findById(element) - - columns = shell.ColumnOrder - rows_count = shell.RowCount - - if rows_count == 0: - return pandas.DataFrame() - - if load_table: - self.load_shell_table(element) - - data = [ - {column: shell.GetCellValue(i, column) for column in columns} - for i in range(rows_count) - ] - - return pandas.DataFrame(data) - - except Exception as ex: - raise exceptions.ActionException(f"Error reading element {element}: {ex}") - - def load_shell_table( - self, table_element: str, move_by: int = 20, move_by_table_end: int = 2 - ): - """ - Skims through the table to load all data, as SAP only loads visible data - - Args: - table_element (str): table element - move_by (int): number of rows to move by, default 20 - move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2 - - Raises: - ActionException: error finding table - """ - - row_position = 0 - - try: - shell = self.session_handle.findById(table_element) - - except Exception as e: - raise exceptions.ActionException( - f"Error finding table {table_element}: {e}" - ) - - while True: - try: - shell.currentCellRow = row_position - shell.SelectedRows = row_position - - except com_error: - """no more rows for this step""" - break - - row_position += move_by - - row_position -= 20 - while True: - try: - shell.currentCellRow = row_position - shell.SelectedRows = row_position - - except com_error: - """no more rows for this step""" - break - - row_position += move_by_table_end - - def press_shell_button(self, element: str, button: str): - """ - Presses button that is in a shell table - - Args: - element (str): table element - button (str): button name - - Raises: - ActionException: error pressing shell button - - Example: - ``` - main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN") - ``` - """ - - try: - self.session_handle.findById(element).pressButton(button) - - except Exception as e: - raise exceptions.ActionException(f"Error pressing button {button}: {e}") - - def select_shell_rows(self, element, indexes: list[int]): - """ - Presses button that is in a shell table - - Args: - element (str): table element - indexes (list[int]): indexes of rows to select, starting with 0 - - Raises: - ActionException: error selecting shell rows - - Example: - ``` - main_window.select_shell_rows("wnd[0]/usr/shellContent/shell", [0, 1, 2]) - ``` - """ - try: - value = ",".join([str(n) for n in indexes]) - self.session_handle.findById(element).selectedRows = value - - except Exception as e: - raise exceptions.ActionException( - f"Error selecting rows with indexes {indexes}: {e}" - ) - - def change_shell_checkbox(self, element: str, checkbox: str, flag: bool): - """ - Sets checkbox in a shell table - - Args: - element (str): table element - checkbox (str): checkbox name - flag (bool): True for checked, False for unchecked - - Raises: - ActionException: error setting shell checkbox + ShellTable: The ShellTable object with the table data and methods to manage it. Example: ``` - main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True) + table = main_window.read_shell_table("wnd[0]/usr/cntlGRID1/shellcont[0]/shell") + rows = table.rows + for row in table: + print(row["COL1"]) + table.to_pandas() ``` """ - - try: - self.session_handle.findById(element).changeCheckbox(checkbox, "1", flag) - - except Exception as e: - raise exceptions.ActionException(f"Error setting element {element}: {e}") + return ShellTable(self.session_handle, element, load_table) diff --git a/readme.md b/readme.md index 9d982df..d1a1f99 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,12 @@ -# Description +[Github - https://github.com/kamildemocko/PySapScript](https://github.com/kamildemocko/PySapScript) + +SAP scripting for use in Python. +Can perform different actions in SAP GUI client on Windows. -SAP scripting for Python automatization # Documentation -[Github - https://github.com/kamildemocko/PySapScript](https://github.com/kamildemocko/PySapScript) +[https://kamildemocko.github.io/PySapScript/pysapscript.html](https://kamildemocko.github.io/PySapScript/pysapscript.html) # Installation @@ -17,7 +19,9 @@ pip install pysapscript ## Create pysapscript object ```python -pss = pysapscript.Sapscript() +import pysapscript + +sapscript = pysapscript.Sapscript() ``` parameter `default_window_title: = "SAP Easy Access"` @@ -25,7 +29,7 @@ parameter `default_window_title: = "SAP Easy Access"` ## Launch Sap ```python -pss.launch_sap( +sapscript.launch_sap( sid="SQ4", client="012", user="robot_t", @@ -35,41 +39,75 @@ pss.launch_sap( additional parameters: -```python -root_sap_dir = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui") -maximise = True -quit_auto = True -``` +`root_sap_dir = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui")` +`maximise = True` +`quit_auto = True` -## Attach to window: +## Attach to an already opened window: ```python -window = pss.attach_window(0, 0) +from pysapscript.window import Window + +window: Window = sapscript.attach_window(0, 0) ``` positional parameters (0, 0) -> (connection, session) ## Quitting SAP: -- will automatically quit if not specified differently -- manual quitting: `pss.quit()` +- pysapscript will automatically quit if not manually specified in `launch_sap` parameter +- manual quitting method: `sapscript.quit()` ## Performing action: -use SAP path starting with `wnd[0]` for element argumetns +**element**: use SAP path starting with `wnd[0]` for element arguments, for example `wnd[0]/usr/txtMAX_SEL` +- element paths can be found by recording a sapscript with SAP GUI or by applications like [SAP Script Tracker](https://tracker.stschnell.de/) + +```python +window = sapscript.attach.window(0, 0) + +window.maximize() +window.restore() +window.close() + +window.start_transaction(value) +window.navigate(NavigateAction.enter) +window.navigate(NavigateAction.back) -``` window.write(element, value) window.press(element) +window.send_v_key(value[, focus_element=True, value=0]) window.select(element) window.read(element) -window.read_shell_table(element) -window.press_shell_button(element, button_name) -window.change_shell_checkbox(element, checkbox_name, boolean) -window.select_shell_rows(element, [0, 1, 2]) +window.set_checkbox(value) +window.visualize(element[, seconds=1]) + +table: ShellTable = window.read_shell_table(element) html_content = window.read_html_viewer(element) ``` -Another available actions... +## Table actions + +ShellTable uses polars, but can also be return pandas or dictionary + +```python +from pysapscript.shell_table import ShellTable + +table: ShellTable = window.read_shell_table() + +table.rows +table.columns + +table.to_dict() +table.to_dicts() +table.to_polars_dataframe() +table.to_pandas_dataframe() + +table.cell(row_value, col_value_or_name) +table.get_column_names() -- close window, open new window, start transaction, navigate, maximize +table.load() +table.press_button(value) +table.select_rows([0, 1, 2]) +table.change_checkbox(element, value) +``` \ No newline at end of file diff --git a/tests/manual_test.py b/tests/manual_test.py index 434f55f..2315461 100644 --- a/tests/manual_test.py +++ b/tests/manual_test.py @@ -8,7 +8,6 @@ class TestRuns: def __init__(self): self.pss = Sapscript() - pwd = os.getenv("sap_sq8_006_robot01_pwd") # Turns on @@ -43,10 +42,16 @@ def test_runs(self): # Table self.window.write("wnd[0]/usr/txtMAX_SEL", "20") self.window.press("wnd[0]/tbar[1]/btn[8]") - table = self.window.read_shell_table("wnd[0]/usr/cntlGRID1/shellcont/shell") - print(table.head()) - self.window.select_shell_rows("wnd[0]/usr/cntlGRID1/shellcont/shell", [1, 3, 5]) + table = self.window.read_shell_table("wnd[0]/usr/cntlGRID1/shellcont/shell") + print(f"str: {str(table)}, repr: {repr(table)}") + print(f"rows: {table.rows}, columns: {table.columns()}") + print(f"polars: {type(table.to_polars_dataframe())}, " + f"pandas: {type(table.to_pandas_dataframe())}, " + f"dict: {type(table.to_dict())}") + print(f"column names: {table.get_column_names()}") + + table.select_rows([1, 3, 5]) self.window.navigate(NavigateAction.back) self.window.navigate(NavigateAction.back) diff --git a/tests/table_attached_test.py b/tests/table_attached_test.py new file mode 100644 index 0000000..8ad99d5 --- /dev/null +++ b/tests/table_attached_test.py @@ -0,0 +1,47 @@ +from pysapscript.pysapscript import Sapscript + + +class TestRuns: + def __init__(self): + self.pss = Sapscript() + self.window = self.pss.attach_window(0, 0) + + def test_runs(self): + # get table + table = self.window.read_shell_table("wnd[0]/usr/cntlGRID1/shellcont/shell") + + # print basic output + print(str(table)) + print(repr(table)) + print(f"rows: {table.rows}, columns: {table.columns}") + print(f"polars: {type(table.to_polars_dataframe())}, " + f"pandas: {type(table.to_pandas_dataframe())}, " + f"dict: {type(table.to_dict())}") + print(f"column names: {table.get_column_names()}") + + # print to dict(s) + print(table.to_dict()) + print(table.to_dicts()) + + # slicing + slci = table[5] + print(slci) + slc = table[2:4] + print(slc) + + # iterating + for row in table: + print(row) + + # cell reading + c = table.cell(1, 3) + print(c) + cs = table.cell(2, "SORTL") + print(cs) + + # method + table.select_rows([1, 3, 5]) + + +if __name__ == "__main__": + TestRuns().test_runs() From 5431c21799dc633c457d26db5f2d1d98ce505282 Mon Sep 17 00:00:00 2001 From: Kamil Democko Date: Fri, 22 Mar 2024 14:11:19 +0100 Subject: [PATCH 2/3] Docs moved --- docs/{pysapscript => }/index.html | 0 docs/{pysapscript => }/pysapscript.html | 0 docs/{pysapscript => }/shell_table.html | 0 docs/{pysapscript => }/types_/exceptions.html | 0 docs/{pysapscript => }/types_/index.html | 0 docs/{pysapscript => }/types_/types.html | 0 docs/{pysapscript => }/utils/index.html | 0 docs/{pysapscript => }/utils/utils.html | 0 docs/{pysapscript => }/window.html | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename docs/{pysapscript => }/index.html (100%) rename docs/{pysapscript => }/pysapscript.html (100%) rename docs/{pysapscript => }/shell_table.html (100%) rename docs/{pysapscript => }/types_/exceptions.html (100%) rename docs/{pysapscript => }/types_/index.html (100%) rename docs/{pysapscript => }/types_/types.html (100%) rename docs/{pysapscript => }/utils/index.html (100%) rename docs/{pysapscript => }/utils/utils.html (100%) rename docs/{pysapscript => }/window.html (100%) diff --git a/docs/pysapscript/index.html b/docs/index.html similarity index 100% rename from docs/pysapscript/index.html rename to docs/index.html diff --git a/docs/pysapscript/pysapscript.html b/docs/pysapscript.html similarity index 100% rename from docs/pysapscript/pysapscript.html rename to docs/pysapscript.html diff --git a/docs/pysapscript/shell_table.html b/docs/shell_table.html similarity index 100% rename from docs/pysapscript/shell_table.html rename to docs/shell_table.html diff --git a/docs/pysapscript/types_/exceptions.html b/docs/types_/exceptions.html similarity index 100% rename from docs/pysapscript/types_/exceptions.html rename to docs/types_/exceptions.html diff --git a/docs/pysapscript/types_/index.html b/docs/types_/index.html similarity index 100% rename from docs/pysapscript/types_/index.html rename to docs/types_/index.html diff --git a/docs/pysapscript/types_/types.html b/docs/types_/types.html similarity index 100% rename from docs/pysapscript/types_/types.html rename to docs/types_/types.html diff --git a/docs/pysapscript/utils/index.html b/docs/utils/index.html similarity index 100% rename from docs/pysapscript/utils/index.html rename to docs/utils/index.html diff --git a/docs/pysapscript/utils/utils.html b/docs/utils/utils.html similarity index 100% rename from docs/pysapscript/utils/utils.html rename to docs/utils/utils.html diff --git a/docs/pysapscript/window.html b/docs/window.html similarity index 100% rename from docs/pysapscript/window.html rename to docs/window.html From 2f3d6617bc02af6cb66cbb5c3a1b005e7ff2d341 Mon Sep 17 00:00:00 2001 From: Kamil Democko Date: Fri, 22 Mar 2024 14:14:45 +0100 Subject: [PATCH 3/3] New version of docs --- docs/index.html | 94 ++++++++++++++++++++++++++++++------------- docs/pysapscript.html | 31 +++++++++++++- 2 files changed, 97 insertions(+), 28 deletions(-) diff --git a/docs/index.html b/docs/index.html index badfc00..25f6533 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ pysapscript API documentation - + @@ -22,20 +22,23 @@

Package pysapscript

-

Description

-

SAP scripting for Python automatization

-

Documentation

Github - https://github.com/kamildemocko/PySapScript

+

SAP scripting for use in Python.
+Can perform different actions in SAP GUI client on Windows.

+

Documentation

+

https://kamildemocko.github.io/PySapScript/pysapscript.html

Installation

pip install pysapscript
 

Usage

Create pysapscript object

-
pss = pysapscript.Sapscript()
+
import pysapscript
+
+sapscript = pysapscript.Sapscript()
 

parameter default_window_title: = "SAP Easy Access"

Launch Sap

-
pss.launch_sap(
+
sapscript.launch_sap(
     sid="SQ4",
     client="012",
     user="robot_t",
@@ -43,42 +46,79 @@ 

Launch Sap

)

additional parameters:

-
root_sap_dir = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui")
-maximise = True
-quit_auto = True
-
-

Attach to window:

-
window = pss.attach_window(0, 0)
+

root_sap_dir = Path(r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui")
+maximise = True
+quit_auto = True

+

Attach to an already opened window:

+
from pysapscript.window import Window
+
+window: Window = sapscript.attach_window(0, 0)
 

positional parameters (0, 0) -> (connection, session)

Quitting SAP:

    -
  • will automatically quit if not specified differently
  • -
  • manual quitting: pss.quit()
  • +
  • pysapscript will automatically quit if not manually specified in launch_sap parameter
  • +
  • manual quitting method: sapscript.quit()

Performing action:

-

use SAP path starting with wnd[0] for element argumetns

-
window.write(element, value)
+

element: use SAP path starting with wnd[0] for element arguments, for example wnd[0]/usr/txtMAX_SEL
+- element paths can be found by recording a sapscript with SAP GUI or by applications like SAP Script Tracker

+
window = sapscript.attach.window(0, 0)
+
+window.maximize()
+window.restore()
+window.close()
+
+window.start_transaction(value)
+window.navigate(NavigateAction.enter)
+window.navigate(NavigateAction.back)
+
+window.write(element, value)
 window.press(element)
+window.send_v_key(value[, focus_element=True, value=0])
 window.select(element)
 window.read(element)
-window.read_shell_table(element)
-window.press_shell_button(element, button_name)
-window.change_shell_checkbox(element, checkbox_name, boolean)
-window.select_shell_rows(element, [0, 1, 2])
+window.set_checkbox(value)
+window.visualize(element[, seconds=1])
+
+table: ShellTable = window.read_shell_table(element)
 html_content = window.read_html_viewer(element)
 
-

Another available actions…

-
    -
  • close window, open new window, start transaction, navigate, maximize
  • -
+

Table actions

+

ShellTable uses polars, but can also be return pandas or dictionary

+
from pysapscript.shell_table import ShellTable
+
+table: ShellTable = window.read_shell_table()
+
+table.rows
+table.columns
+
+table.to_dict()
+table.to_dicts()
+table.to_polars_dataframe()
+table.to_pandas_dataframe()
+
+table.cell(row_value, col_value_or_name)
+table.get_column_names()
+
+table.load()
+table.press_button(value)
+table.select_rows([0, 1, 2])
+table.change_checkbox(element, value)
+
Expand source code
"""
 .. include:: ../README.md
-"""
+""" + +from .pysapscript import Sapscript +from .window import Window +from .shell_table import ShellTable +from .types_.types import NavigateAction +from .types_ import exceptions
@@ -117,15 +157,15 @@

Sub-modules

Index

diff --git a/docs/pysapscript.html b/docs/pysapscript.html index 13bac71..f10b881 100644 --- a/docs/pysapscript.html +++ b/docs/pysapscript.html @@ -40,6 +40,16 @@

Module pysapscript.pysapscript

class Sapscript: def __init__(self, default_window_title: str = "SAP Easy Access") -> None: + """ + Args: + default_window_title (str): default SAP window title + + Example: + sapscript = Sapscript() + main_window = sapscript.attach_window(0, 0) + main_window.write("wnd[0]/tbar[0]/okcd", "ZLOGON") + main_window.press("wnd[0]/tbar[0]/btn[0]") + """ self._sap_gui_auto = None self._application = None self.default_window_title = default_window_title @@ -227,13 +237,32 @@

Classes

(default_window_title: str = 'SAP Easy Access')
-
+

Args

+
+
default_window_title : str
+
default SAP window title
+
+

Example

+

sapscript = Sapscript() +main_window = sapscript.attach_window(0, 0) +main_window.write("wnd[0]/tbar[0]/okcd", "ZLOGON") +main_window.press("wnd[0]/tbar[0]/btn[0]")

Expand source code
class Sapscript:
     def __init__(self, default_window_title: str = "SAP Easy Access") -> None:
+        """
+        Args:
+            default_window_title (str): default SAP window title
+
+        Example:
+            sapscript = Sapscript()
+            main_window = sapscript.attach_window(0, 0)
+            main_window.write("wnd[0]/tbar[0]/okcd", "ZLOGON")
+            main_window.press("wnd[0]/tbar[0]/btn[0]")
+        """
         self._sap_gui_auto = None
         self._application = None
         self.default_window_title = default_window_title