diff --git a/docs/index.html b/docs/index.html index 3bd65fc..25f6533 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,7 +1,190 @@ - + - - + + + +pysapscript API documentation + + + + + + + + + - + +
+
+
+

Package pysapscript

+
+
+

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

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

parameter default_window_title: = "SAP Easy Access"

+

Launch Sap

+
sapscript.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 an already opened window:

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

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

+

Quitting SAP:

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

Performing action:

+

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.set_checkbox(value)
+window.visualize(element[, seconds=1])
+
+table: ShellTable = window.read_shell_table(element)
+html_content = window.read_html_viewer(element)
+
+

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
+
+
+
+

Sub-modules

+
+
pysapscript.pysapscript
+
+
+
+
pysapscript.shell_table
+
+
+
+
pysapscript.types_
+
+
+
+
pysapscript.utils
+
+
+
+
pysapscript.window
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/pysapscript.html b/docs/pysapscript.html index ac0a2fa..f10b881 100644 --- a/docs/pysapscript.html +++ b/docs/pysapscript.html @@ -1,338 +1,719 @@ - - - - pysapscript API documentation - - - - - - - + + + +pysapscript.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")
-)
-
+
+
+
+

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:
+        """
+        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) -> 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') +
+
+

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
+
+    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)
+
+
+ +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)
+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")
+
+
+
+
+
+
+
+
- - - - - -
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/pysapscript.html b/docs/pysapscript/pysapscript.html deleted file mode 100644 index 0f8a920..0000000 --- a/docs/pysapscript/pysapscript.html +++ /dev/null @@ -1,929 +0,0 @@ - - - - - - - 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

- -

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

- -

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)
-

-
- - -
-
-
- - \ 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 deleted file mode 100644 index 2c43334..0000000 --- a/docs/pysapscript/types_/exceptions.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - 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 ...

-
- - -
-
Inherited Members
-
-
builtins.Exception
-
Exception
- -
-
builtins.BaseException
-
with_traceback
-
add_note
-
args
- -
-
-
-
-
- - \ No newline at end of file diff --git a/docs/pysapscript/types_/types.html b/docs/pysapscript/types_/types.html deleted file mode 100644 index 67d33cd..0000000 --- a/docs/pysapscript/types_/types.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - pysapscript.types_.types API documentation - - - - - - - - - -
-
-

-pysapscript.types_.types

- - - - - - -
 1from enum import Enum
- 2
- 3
- 4class NavigateAction(Enum):
- 5    """
- 6    Type for Window.navigate()
- 7    """
- 8
- 9    enter = "enter"
-10    back = "back"
-11    end = "end"
-12    cancel = "cancel"
-13    save = "save"
-
- - -
- -
- - \ 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/utils.html b/docs/pysapscript/utils/utils.html deleted file mode 100644 index a6c1aa2..0000000 --- a/docs/pysapscript/utils/utils.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - 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, -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

-
- - -
-
- - \ No newline at end of file diff --git a/docs/pysapscript/window.html b/docs/pysapscript/window.html deleted file mode 100644 index c2946b1..0000000 --- a/docs/pysapscript/window.html +++ /dev/null @@ -1,1693 +0,0 @@ - - - - - - - pysapscript.window API documentation - - - - - - - - - -
-
-

-pysapscript.window

- - - - - - -
  1from time import sleep
-  2
-  3import win32com.client
-  4import pandas
-  5from win32com.universal import com_error
-  6
-  7from pysapscript.types_ import exceptions
-  8from pysapscript.types_.types import NavigateAction
-  9
- 10
- 11class Window:
- 12    def __init__(self, 
- 13                 connection: int, connection_handle: win32com.client.CDispatch, 
- 14                 session: int, session_handle: win32com.client.CDispatch):
- 15        self.connection = connection
- 16        self.connection_handle = connection_handle
- 17        self.session = session
- 18        self.session_handle = session_handle
- 19
- 20    def maximize(self):
- 21        """
- 22        Maximizes this sap window
- 23        """
- 24
- 25        self.session_handle.findById("wnd[0]").maximize()
- 26
- 27    def restore(self):
- 28        """
- 29        Restores sap window to its default size, resp. before maximization
- 30        """
- 31
- 32        self.session_handle.findById("wnd[0]").restore()
- 33
- 34    def close_window(self):
- 35        """
- 36        Closes this sap window
- 37        """
- 38
- 39        self.session_handle.findById("wnd[0]").close()
- 40
- 41    def navigate(self, action: NavigateAction):
- 42        """
- 43        Navigates SAP: enter, back, end, cancel, save
- 44
- 45        Args:
- 46            action (NavigateAction): enter, back, end, cancel, save
- 47
- 48        Raises:
- 49            ActionException: wrong navigation action
- 50
- 51        Example:
- 52            ```
- 53            main_window.navigate(NavigateAction.enter)
- 54            ```
- 55        """
- 56
- 57        if action == NavigateAction.enter:
- 58            el = "wnd[0]/tbar[0]/btn[0]"
- 59        elif action == NavigateAction.back:
- 60            el = "wnd[0]/tbar[0]/btn[3]"
- 61        elif action == NavigateAction.end:
- 62            el = "wnd[0]/tbar[0]/btn[15]"
- 63        elif action == NavigateAction.cancel:
- 64            el = "wnd[0]/tbar[0]/btn[12]"
- 65        elif action == NavigateAction.save:
- 66            el = "wnd[0]/tbar[0]/btn[13]"
- 67        else:
- 68            raise exceptions.ActionException("Wrong navigation action!")
- 69
- 70        self.session_handle.findById(el).press()
- 71
- 72    def start_transaction(self, transaction: str):
- 73        """
- 74        Starts transaction
- 75
- 76        Args:
- 77            transaction (str): transaction name
- 78        """
- 79
- 80        self.write("wnd[0]/tbar[0]/okcd", transaction)
- 81        self.navigate(NavigateAction.enter)
- 82
- 83    def press(self, element: str):
- 84        """
- 85        Presses element
- 86
- 87        Args:
- 88            element (str): element to press
- 89
- 90        Raises:
- 91            ActionException: error clicking element
- 92
- 93        Example:
- 94            ```
- 95            main_window.press("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
- 96            ```
- 97        """
- 98
- 99        try:
-100            self.session_handle.findById(element).press()
-101
-102        except Exception as ex:
-103            raise exceptions.ActionException(
-104                f"Error clicking element {element}: {ex}"
-105            )
-106
-107    def select(self, element: str):
-108        """
-109        Selects element or menu item
-110
-111        Args:
-112            element (str): element to select - tabs, menu items
-113
-114        Raises:
-115            ActionException: error selecting element
-116
-117        Example:
-118            ```
-119            main_window.select("wnd[2]/tbar[0]/btn[1]")
-120            ```
-121        """
-122
-123        try:
-124            self.session_handle.findById(element).select()
-125
-126        except Exception as ex:
-127            raise exceptions.ActionException(f"Error clicking element {element}: {ex}")
-128
-129    def write(self, element: str, text: str):
-130        """
-131        Sets text property of an element
-132
-133        Args:
-134            element (str): element to accept a value
-135            text (str): value to set
-136
-137        Raises:
-138            ActionException: Error writing to element
-139
-140        Example:
-141            ```
-142            main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
-143            ```
-144        """
-145
-146        try:
-147            self.session_handle.findById(element).text = text
-148
-149        except Exception as ex:
-150            raise exceptions.ActionException(f"Error writing to element {element}: {ex}")
-151
-152    def read(self, element: str) -> str:
-153        """
-154        Reads text property
-155
-156        Args:
-157            element (str): element to read
-158
-159        Raises:
-160            ActionException: Error reading element
-161
-162        Example:
-163            ```
-164            value = main_window.read("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
-165            ```
-166        """
-167
-168        try:
-169            return self.session_handle.findById(element).text
-170
-171        except Exception as e:
-172            raise exceptions.ActionException(f"Error reading element {element}: {e}")
-173
-174    def visualize(self, element: str, seconds: int = 1):
-175        """
-176        draws red frame around the element
-177
-178        Args:
-179            element (str): element to draw around
-180            seconds (int): seconds to wait for
-181
-182        Raises:
-183            ActionException: Error visualizing element
-184        """
-185
-186        try:
-187            self.session_handle.findById(element).Visualize(1)
-188            sleep(seconds)
-189
-190        except Exception as e:
-191            raise exceptions.ActionException(f"Error visualizing element {element}: {e}")
-192
-193    def read_shell_table(self, element: str, load_table: bool = True) -> pandas.DataFrame:
-194        """
-195        Reads table of shell table
-196
-197        If the table is too big, the SAP will not render all the data.
-198        Default is to load table before reading it
-199
-200        Args:
-201            element (str): table element
-202            load_table (bool): whether to load table before reading
-203
-204        Returns:
-205            pandas.DataFrame: table data
-206
-207        Raises:
-208            ActionException: Error reading table
-209
-210        Example:
-211            ```
-212            table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell")
-213            ```
-214        """
-215
-216        try:
-217            shell = self.session_handle.findById(element)
-218
-219            columns = shell.ColumnOrder
-220            rows_count = shell.RowCount
-221
-222            if rows_count == 0:
-223                return pandas.DataFrame()
-224
-225            if load_table:
-226                self.load_shell_table(element)
-227
-228            data = [{column: shell.GetCellValue(i, column) for column in columns} for i in range(rows_count)]
-229
-230            return pandas.DataFrame(data)
-231
-232        except Exception as ex:
-233            raise exceptions.ActionException(f"Error reading element {element}: {ex}")
-234
-235    def load_shell_table(self, table_element: str, move_by: int = 20, move_by_table_end: int = 2):
-236        """
-237        Skims through the table to load all data, as SAP only loads visible data
-238
-239        Args:
-240            table_element (str): table element
-241            move_by (int): number of rows to move by, default 20
-242            move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2
-243
-244        Raises:
-245            ActionException: error finding table
-246        """
-247
-248        row_position = 0
-249
-250        try:
-251            shell = self.session_handle.findById(table_element)
-252
-253        except Exception as e:
-254            raise exceptions.ActionException(f"Error finding table {table_element}: {e}")
-255
-256        while True:
-257            try:
-258                shell.currentCellRow = row_position
-259                shell.SelectedRows = row_position
-260
-261            except com_error:
-262                """no more rows for this step"""
-263                break
-264
-265            row_position += move_by
-266
-267        row_position -= 20
-268        while True:
-269            try:
-270                shell.currentCellRow = row_position
-271                shell.SelectedRows = row_position
-272
-273            except com_error:
-274                """no more rows for this step"""
-275                break
-276
-277            row_position += move_by_table_end
-278
-279    def press_shell_button(self, element: str, button: str):
-280        """
-281        Presses button that is in a shell table
-282
-283        Args:
-284            element (str): table element
-285            button (str): button name
-286
-287        Raises:
-288            ActionException: error pressing shell button
-289
-290        Example:
-291            ```
-292            main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
-293            ```
-294        """
-295
-296        try:
-297            self.session_handle.findById(element).pressButton(button)
-298
-299        except Exception as e:
-300            raise exceptions.ActionException(f"Error pressing button {button}: {e}")
-301
-302    def change_shell_checkbox(self, element: str, checkbox: str, flag: bool):
-303        """
-304        Sets checkbox in a shell table
-305
-306        Args:
-307            element (str): table element
-308            checkbox (str): checkbox name
-309            flag (bool): True for checked, False for unchecked
-310
-311        Raises:
-312            ActionException: error setting shell checkbox
-313
-314        Example:
-315            ```
-316            main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
-317            ```
-318        """
-319
-320        try:
-321            self.session_handle.findById(element).changeCheckbox(checkbox, "1", flag)
-322
-323        except Exception as e:
-324            raise exceptions.ActionException(f"Error setting element {element}: {e}")
-
- - -
-
- -
- - class - Window: - - - -
- -
 12class Window:
- 13    def __init__(self, 
- 14                 connection: int, connection_handle: win32com.client.CDispatch, 
- 15                 session: int, session_handle: win32com.client.CDispatch):
- 16        self.connection = connection
- 17        self.connection_handle = connection_handle
- 18        self.session = session
- 19        self.session_handle = session_handle
- 20
- 21    def maximize(self):
- 22        """
- 23        Maximizes this sap window
- 24        """
- 25
- 26        self.session_handle.findById("wnd[0]").maximize()
- 27
- 28    def restore(self):
- 29        """
- 30        Restores sap window to its default size, resp. before maximization
- 31        """
- 32
- 33        self.session_handle.findById("wnd[0]").restore()
- 34
- 35    def close_window(self):
- 36        """
- 37        Closes this sap window
- 38        """
- 39
- 40        self.session_handle.findById("wnd[0]").close()
- 41
- 42    def navigate(self, action: NavigateAction):
- 43        """
- 44        Navigates SAP: enter, back, end, cancel, save
- 45
- 46        Args:
- 47            action (NavigateAction): enter, back, end, cancel, save
- 48
- 49        Raises:
- 50            ActionException: wrong navigation action
- 51
- 52        Example:
- 53            ```
- 54            main_window.navigate(NavigateAction.enter)
- 55            ```
- 56        """
- 57
- 58        if action == NavigateAction.enter:
- 59            el = "wnd[0]/tbar[0]/btn[0]"
- 60        elif action == NavigateAction.back:
- 61            el = "wnd[0]/tbar[0]/btn[3]"
- 62        elif action == NavigateAction.end:
- 63            el = "wnd[0]/tbar[0]/btn[15]"
- 64        elif action == NavigateAction.cancel:
- 65            el = "wnd[0]/tbar[0]/btn[12]"
- 66        elif action == NavigateAction.save:
- 67            el = "wnd[0]/tbar[0]/btn[13]"
- 68        else:
- 69            raise exceptions.ActionException("Wrong navigation action!")
- 70
- 71        self.session_handle.findById(el).press()
- 72
- 73    def start_transaction(self, transaction: str):
- 74        """
- 75        Starts transaction
- 76
- 77        Args:
- 78            transaction (str): transaction name
- 79        """
- 80
- 81        self.write("wnd[0]/tbar[0]/okcd", transaction)
- 82        self.navigate(NavigateAction.enter)
- 83
- 84    def press(self, element: str):
- 85        """
- 86        Presses element
- 87
- 88        Args:
- 89            element (str): element to press
- 90
- 91        Raises:
- 92            ActionException: error clicking element
- 93
- 94        Example:
- 95            ```
- 96            main_window.press("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
- 97            ```
- 98        """
- 99
-100        try:
-101            self.session_handle.findById(element).press()
-102
-103        except Exception as ex:
-104            raise exceptions.ActionException(
-105                f"Error clicking element {element}: {ex}"
-106            )
-107
-108    def select(self, element: str):
-109        """
-110        Selects element or menu item
-111
-112        Args:
-113            element (str): element to select - tabs, menu items
-114
-115        Raises:
-116            ActionException: error selecting element
-117
-118        Example:
-119            ```
-120            main_window.select("wnd[2]/tbar[0]/btn[1]")
-121            ```
-122        """
-123
-124        try:
-125            self.session_handle.findById(element).select()
-126
-127        except Exception as ex:
-128            raise exceptions.ActionException(f"Error clicking element {element}: {ex}")
-129
-130    def write(self, element: str, text: str):
-131        """
-132        Sets text property of an element
-133
-134        Args:
-135            element (str): element to accept a value
-136            text (str): value to set
-137
-138        Raises:
-139            ActionException: Error writing to element
-140
-141        Example:
-142            ```
-143            main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
-144            ```
-145        """
-146
-147        try:
-148            self.session_handle.findById(element).text = text
-149
-150        except Exception as ex:
-151            raise exceptions.ActionException(f"Error writing to element {element}: {ex}")
-152
-153    def read(self, element: str) -> str:
-154        """
-155        Reads text property
-156
-157        Args:
-158            element (str): element to read
-159
-160        Raises:
-161            ActionException: Error reading element
-162
-163        Example:
-164            ```
-165            value = main_window.read("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
-166            ```
-167        """
-168
-169        try:
-170            return self.session_handle.findById(element).text
-171
-172        except Exception as e:
-173            raise exceptions.ActionException(f"Error reading element {element}: {e}")
-174
-175    def visualize(self, element: str, seconds: int = 1):
-176        """
-177        draws red frame around the element
-178
-179        Args:
-180            element (str): element to draw around
-181            seconds (int): seconds to wait for
-182
-183        Raises:
-184            ActionException: Error visualizing element
-185        """
-186
-187        try:
-188            self.session_handle.findById(element).Visualize(1)
-189            sleep(seconds)
-190
-191        except Exception as e:
-192            raise exceptions.ActionException(f"Error visualizing element {element}: {e}")
-193
-194    def read_shell_table(self, element: str, load_table: bool = True) -> pandas.DataFrame:
-195        """
-196        Reads table of shell table
-197
-198        If the table is too big, the SAP will not render all the data.
-199        Default is to load table before reading it
-200
-201        Args:
-202            element (str): table element
-203            load_table (bool): whether to load table before reading
-204
-205        Returns:
-206            pandas.DataFrame: table data
-207
-208        Raises:
-209            ActionException: Error reading table
-210
-211        Example:
-212            ```
-213            table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell")
-214            ```
-215        """
-216
-217        try:
-218            shell = self.session_handle.findById(element)
-219
-220            columns = shell.ColumnOrder
-221            rows_count = shell.RowCount
-222
-223            if rows_count == 0:
-224                return pandas.DataFrame()
-225
-226            if load_table:
-227                self.load_shell_table(element)
-228
-229            data = [{column: shell.GetCellValue(i, column) for column in columns} for i in range(rows_count)]
-230
-231            return pandas.DataFrame(data)
-232
-233        except Exception as ex:
-234            raise exceptions.ActionException(f"Error reading element {element}: {ex}")
-235
-236    def load_shell_table(self, table_element: str, move_by: int = 20, move_by_table_end: int = 2):
-237        """
-238        Skims through the table to load all data, as SAP only loads visible data
-239
-240        Args:
-241            table_element (str): table element
-242            move_by (int): number of rows to move by, default 20
-243            move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2
-244
-245        Raises:
-246            ActionException: error finding table
-247        """
-248
-249        row_position = 0
-250
-251        try:
-252            shell = self.session_handle.findById(table_element)
-253
-254        except Exception as e:
-255            raise exceptions.ActionException(f"Error finding table {table_element}: {e}")
-256
-257        while True:
-258            try:
-259                shell.currentCellRow = row_position
-260                shell.SelectedRows = row_position
-261
-262            except com_error:
-263                """no more rows for this step"""
-264                break
-265
-266            row_position += move_by
-267
-268        row_position -= 20
-269        while True:
-270            try:
-271                shell.currentCellRow = row_position
-272                shell.SelectedRows = row_position
-273
-274            except com_error:
-275                """no more rows for this step"""
-276                break
-277
-278            row_position += move_by_table_end
-279
-280    def press_shell_button(self, element: str, button: str):
-281        """
-282        Presses button that is in a shell table
-283
-284        Args:
-285            element (str): table element
-286            button (str): button name
-287
-288        Raises:
-289            ActionException: error pressing shell button
-290
-291        Example:
-292            ```
-293            main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
-294            ```
-295        """
-296
-297        try:
-298            self.session_handle.findById(element).pressButton(button)
-299
-300        except Exception as e:
-301            raise exceptions.ActionException(f"Error pressing button {button}: {e}")
-302
-303    def change_shell_checkbox(self, element: str, checkbox: str, flag: bool):
-304        """
-305        Sets checkbox in a shell table
-306
-307        Args:
-308            element (str): table element
-309            checkbox (str): checkbox name
-310            flag (bool): True for checked, False for unchecked
-311
-312        Raises:
-313            ActionException: error setting shell checkbox
-314
-315        Example:
-316            ```
-317            main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
-318            ```
-319        """
-320
-321        try:
-322            self.session_handle.findById(element).changeCheckbox(checkbox, "1", flag)
-323
-324        except Exception as e:
-325            raise exceptions.ActionException(f"Error setting element {element}: {e}")
-
- - - - -
- -
- - Window( connection: int, connection_handle: win32com.client.CDispatch, session: int, session_handle: win32com.client.CDispatch) - - - -
- -
13    def __init__(self, 
-14                 connection: int, connection_handle: win32com.client.CDispatch, 
-15                 session: int, session_handle: win32com.client.CDispatch):
-16        self.connection = connection
-17        self.connection_handle = connection_handle
-18        self.session = session
-19        self.session_handle = session_handle
-
- - - - -
-
-
- connection - - -
- - - - -
-
-
- connection_handle - - -
- - - - -
-
-
- session - - -
- - - - -
-
-
- session_handle - - -
- - - - -
-
- -
- - def - maximize(self): - - - -
- -
21    def maximize(self):
-22        """
-23        Maximizes this sap window
-24        """
-25
-26        self.session_handle.findById("wnd[0]").maximize()
-
- - -

Maximizes this sap window

-
- - -
-
- -
- - def - restore(self): - - - -
- -
28    def restore(self):
-29        """
-30        Restores sap window to its default size, resp. before maximization
-31        """
-32
-33        self.session_handle.findById("wnd[0]").restore()
-
- - -

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

-
- - -
-
- -
- - def - close_window(self): - - - -
- -
35    def close_window(self):
-36        """
-37        Closes this sap window
-38        """
-39
-40        self.session_handle.findById("wnd[0]").close()
-
- - -

Closes this sap window

-
- - -
-
- -
- - def - navigate(self, action: pysapscript.types_.types.NavigateAction): - - - -
- -
42    def navigate(self, action: NavigateAction):
-43        """
-44        Navigates SAP: enter, back, end, cancel, save
-45
-46        Args:
-47            action (NavigateAction): enter, back, end, cancel, save
-48
-49        Raises:
-50            ActionException: wrong navigation action
-51
-52        Example:
-53            ```
-54            main_window.navigate(NavigateAction.enter)
-55            ```
-56        """
-57
-58        if action == NavigateAction.enter:
-59            el = "wnd[0]/tbar[0]/btn[0]"
-60        elif action == NavigateAction.back:
-61            el = "wnd[0]/tbar[0]/btn[3]"
-62        elif action == NavigateAction.end:
-63            el = "wnd[0]/tbar[0]/btn[15]"
-64        elif action == NavigateAction.cancel:
-65            el = "wnd[0]/tbar[0]/btn[12]"
-66        elif action == NavigateAction.save:
-67            el = "wnd[0]/tbar[0]/btn[13]"
-68        else:
-69            raise exceptions.ActionException("Wrong navigation action!")
-70
-71        self.session_handle.findById(el).press()
-
- - -

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

- -

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

- -

Raises: - ActionException: wrong navigation action

- -

Example: -

main_window.navigate(NavigateAction.enter)
-

-
- - -
-
- -
- - def - start_transaction(self, transaction: str): - - - -
- -
73    def start_transaction(self, transaction: str):
-74        """
-75        Starts transaction
-76
-77        Args:
-78            transaction (str): transaction name
-79        """
-80
-81        self.write("wnd[0]/tbar[0]/okcd", transaction)
-82        self.navigate(NavigateAction.enter)
-
- - -

Starts transaction

- -

Args: - transaction (str): transaction name

-
- - -
-
- -
- - def - press(self, element: str): - - - -
- -
 84    def press(self, element: str):
- 85        """
- 86        Presses element
- 87
- 88        Args:
- 89            element (str): element to press
- 90
- 91        Raises:
- 92            ActionException: error clicking element
- 93
- 94        Example:
- 95            ```
- 96            main_window.press("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
- 97            ```
- 98        """
- 99
-100        try:
-101            self.session_handle.findById(element).press()
-102
-103        except Exception as ex:
-104            raise exceptions.ActionException(
-105                f"Error clicking element {element}: {ex}"
-106            )
-
- - -

Presses element

- -

Args: - element (str): element to press

- -

Raises: - ActionException: error clicking element

- -

Example: -

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

-
- - -
-
- -
- - def - select(self, element: str): - - - -
- -
108    def select(self, element: str):
-109        """
-110        Selects element or menu item
-111
-112        Args:
-113            element (str): element to select - tabs, menu items
-114
-115        Raises:
-116            ActionException: error selecting element
-117
-118        Example:
-119            ```
-120            main_window.select("wnd[2]/tbar[0]/btn[1]")
-121            ```
-122        """
-123
-124        try:
-125            self.session_handle.findById(element).select()
-126
-127        except Exception as ex:
-128            raise exceptions.ActionException(f"Error clicking element {element}: {ex}")
-
- - -

Selects element or menu item

- -

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

- -

Raises: - ActionException: error selecting element

- -

Example: -

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

-
- - -
-
- -
- - def - write(self, element: str, text: str): - - - -
- -
130    def write(self, element: str, text: str):
-131        """
-132        Sets text property of an element
-133
-134        Args:
-135            element (str): element to accept a value
-136            text (str): value to set
-137
-138        Raises:
-139            ActionException: Error writing to element
-140
-141        Example:
-142            ```
-143            main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
-144            ```
-145        """
-146
-147        try:
-148            self.session_handle.findById(element).text = text
-149
-150        except Exception as ex:
-151            raise exceptions.ActionException(f"Error writing to element {element}: {ex}")
-
- - -

Sets text property of an element

- -

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

- -

Raises: - ActionException: Error writing to element

- -

Example: -

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

-
- - -
-
- -
- - def - read(self, element: str) -> str: - - - -
- -
153    def read(self, element: str) -> str:
-154        """
-155        Reads text property
-156
-157        Args:
-158            element (str): element to read
-159
-160        Raises:
-161            ActionException: Error reading element
-162
-163        Example:
-164            ```
-165            value = main_window.read("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
-166            ```
-167        """
-168
-169        try:
-170            return self.session_handle.findById(element).text
-171
-172        except Exception as e:
-173            raise exceptions.ActionException(f"Error reading element {element}: {e}")
-
- - -

Reads text property

- -

Args: - element (str): element to read

- -

Raises: - ActionException: Error reading element

- -

Example: -

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

-
- - -
-
- -
- - def - visualize(self, element: str, seconds: int = 1): - - - -
- -
175    def visualize(self, element: str, seconds: int = 1):
-176        """
-177        draws red frame around the element
-178
-179        Args:
-180            element (str): element to draw around
-181            seconds (int): seconds to wait for
-182
-183        Raises:
-184            ActionException: Error visualizing element
-185        """
-186
-187        try:
-188            self.session_handle.findById(element).Visualize(1)
-189            sleep(seconds)
-190
-191        except Exception as e:
-192            raise exceptions.ActionException(f"Error visualizing element {element}: {e}")
-
- - -

draws red frame around the element

- -

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

- -

Raises: - ActionException: Error visualizing element

-
- - -
-
- -
- - def - read_shell_table( self, element: str, load_table: bool = True) -> pandas.core.frame.DataFrame: - - - -
- -
194    def read_shell_table(self, element: str, load_table: bool = True) -> pandas.DataFrame:
-195        """
-196        Reads table of shell table
-197
-198        If the table is too big, the SAP will not render all the data.
-199        Default is to load table before reading it
-200
-201        Args:
-202            element (str): table element
-203            load_table (bool): whether to load table before reading
-204
-205        Returns:
-206            pandas.DataFrame: table data
-207
-208        Raises:
-209            ActionException: Error reading table
-210
-211        Example:
-212            ```
-213            table = main_window.read_shell_table("wnd[0]/usr/shellContent/shell")
-214            ```
-215        """
-216
-217        try:
-218            shell = self.session_handle.findById(element)
-219
-220            columns = shell.ColumnOrder
-221            rows_count = shell.RowCount
-222
-223            if rows_count == 0:
-224                return pandas.DataFrame()
-225
-226            if load_table:
-227                self.load_shell_table(element)
-228
-229            data = [{column: shell.GetCellValue(i, column) for column in columns} for i in range(rows_count)]
-230
-231            return pandas.DataFrame(data)
-232
-233        except Exception as ex:
-234            raise exceptions.ActionException(f"Error reading element {element}: {ex}")
-
- - -

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: - element (str): table element - 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")
-

-
- - -
-
- -
- - def - load_shell_table( self, table_element: str, move_by: int = 20, move_by_table_end: int = 2): - - - -
- -
236    def load_shell_table(self, table_element: str, move_by: int = 20, move_by_table_end: int = 2):
-237        """
-238        Skims through the table to load all data, as SAP only loads visible data
-239
-240        Args:
-241            table_element (str): table element
-242            move_by (int): number of rows to move by, default 20
-243            move_by_table_end (int): number of rows to move by when reaching the end of the table, default 2
-244
-245        Raises:
-246            ActionException: error finding table
-247        """
-248
-249        row_position = 0
-250
-251        try:
-252            shell = self.session_handle.findById(table_element)
-253
-254        except Exception as e:
-255            raise exceptions.ActionException(f"Error finding table {table_element}: {e}")
-256
-257        while True:
-258            try:
-259                shell.currentCellRow = row_position
-260                shell.SelectedRows = row_position
-261
-262            except com_error:
-263                """no more rows for this step"""
-264                break
-265
-266            row_position += move_by
-267
-268        row_position -= 20
-269        while True:
-270            try:
-271                shell.currentCellRow = row_position
-272                shell.SelectedRows = row_position
-273
-274            except com_error:
-275                """no more rows for this step"""
-276                break
-277
-278            row_position += move_by_table_end
-
- - -

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

-
- - -
-
- -
- - def - press_shell_button(self, element: str, button: str): - - - -
- -
280    def press_shell_button(self, element: str, button: str):
-281        """
-282        Presses button that is in a shell table
-283
-284        Args:
-285            element (str): table element
-286            button (str): button name
-287
-288        Raises:
-289            ActionException: error pressing shell button
-290
-291        Example:
-292            ```
-293            main_window.press_shell_button("wnd[0]/usr/shellContent/shell", "%OPENDWN")
-294            ```
-295        """
-296
-297        try:
-298            self.session_handle.findById(element).pressButton(button)
-299
-300        except Exception as e:
-301            raise exceptions.ActionException(f"Error pressing button {button}: {e}")
-
- - -

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")
-

-
- - -
-
- -
- - def - change_shell_checkbox(self, element: str, checkbox: str, flag: bool): - - - -
- -
303    def change_shell_checkbox(self, element: str, checkbox: str, flag: bool):
-304        """
-305        Sets checkbox in a shell table
-306
-307        Args:
-308            element (str): table element
-309            checkbox (str): checkbox name
-310            flag (bool): True for checked, False for unchecked
-311
-312        Raises:
-313            ActionException: error setting shell checkbox
-314
-315        Example:
-316            ```
-317            main_window.change_shell_checkbox("wnd[0]/usr/cntlALV_CONT/shellcont/shell/rows[1]", "%CHBX", True)
-318            ```
-319        """
-320
-321        try:
-322            self.session_handle.findById(element).changeCheckbox(checkbox, "1", flag)
-323
-324        except Exception as e:
-325            raise exceptions.ActionException(f"Error setting element {element}: {e}")
-
- - -

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

- -

Example: -

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

-
- - -
-
-
- - \ 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/docs/shell_table.html b/docs/shell_table.html new file mode 100644 index 0000000..cc87dde --- /dev/null +++ b/docs/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/types_/exceptions.html b/docs/types_/exceptions.html new file mode 100644 index 0000000..517e94b --- /dev/null +++ b/docs/types_/exceptions.html @@ -0,0 +1,145 @@ + + + + + + +pysapscript.types_.exceptions API documentation + + + + + + + + + + + +
+
+
+

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/types_/index.html b/docs/types_/index.html new file mode 100644 index 0000000..fa1eb56 --- /dev/null +++ b/docs/types_/index.html @@ -0,0 +1,70 @@ + + + + + + +pysapscript.types_ API documentation + + + + + + + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/docs/types_/types.html b/docs/types_/types.html new file mode 100644 index 0000000..e618f5b --- /dev/null +++ b/docs/types_/types.html @@ -0,0 +1,137 @@ + + + + + + +pysapscript.types_.types API documentation + + + + + + + + + + + +
+
+
+

Module pysapscript.types_.types

+
+
+
+ +Expand source code + +
from enum import Enum
+
+
+class NavigateAction(Enum):
+    """
+    Type for Window.navigate()
+    """
+
+    enter = "enter"
+    back = "back"
+    end = "end"
+    cancel = "cancel"
+    save = "save"
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class NavigateAction +(*args, **kwds) +
+
+

Type for Window.navigate()

+
+ +Expand source code + +
class NavigateAction(Enum):
+    """
+    Type for Window.navigate()
+    """
+
+    enter = "enter"
+    back = "back"
+    end = "end"
+    cancel = "cancel"
+    save = "save"
+
+

Ancestors

+
    +
  • enum.Enum
  • +
+

Class variables

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

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
+
+
+ +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/window.html b/docs/window.html new file mode 100644 index 0000000..68fbf1f --- /dev/null +++ b/docs/window.html @@ -0,0 +1,1266 @@ + + + + + + +pysapscript.window API documentation + + + + + + + + + + + +
+
+
+

Module pysapscript.window

+
+
+
+ +Expand source code + +
from time import sleep
+
+import win32com.client
+
+from pysapscript.types_ import exceptions
+from pysapscript.types_.types import NavigateAction
+from pysapscript.shell_table import ShellTable
+
+
+class Window:
+    def __init__(
+        self,
+        connection: int,
+        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 __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) -> None:
+        """
+        Restores sap window to its default size, resp. before maximization
+        """
+        self.session_handle.findById("wnd[0]").restore()
+
+    def close_window(self) -> None:
+        """
+        Closes this sap window
+        """
+        self.session_handle.findById("wnd[0]").close()
+
+    def navigate(self, action: NavigateAction) -> None:
+        """
+        Navigates SAP: enter, back, end, cancel, save
+
+        Args:
+            action (NavigateAction): enter, back, end, cancel, save
+
+        Raises:
+            ActionException: wrong navigation action
+
+        Example:
+            ```
+            main_window.navigate(NavigateAction.enter)
+            ```
+        """
+        if action == NavigateAction.enter:
+            el = "wnd[0]/tbar[0]/btn[0]"
+        elif action == NavigateAction.back:
+            el = "wnd[0]/tbar[0]/btn[3]"
+        elif action == NavigateAction.end:
+            el = "wnd[0]/tbar[0]/btn[15]"
+        elif action == NavigateAction.cancel:
+            el = "wnd[0]/tbar[0]/btn[12]"
+        elif action == NavigateAction.save:
+            el = "wnd[0]/tbar[0]/btn[13]"
+        else:
+            raise exceptions.ActionException("Wrong navigation action!")
+
+        self.session_handle.findById(el).press()
+
+    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) -> None:
+        """
+        Presses element
+
+        Args:
+            element (str): element to press
+
+        Raises:
+            ActionException: error clicking element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        Selects element or menu item
+
+        Args:
+            element (str): element to select - tabs, menu items
+
+        Raises:
+            ActionException: error selecting element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        Selects checkbox element
+
+        Args:
+            element (str): checkbox element
+            selected (bool): selected state - True for checked, False for unchecked
+
+        Raises:
+            ActionException: error checking checkbox element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        Sets text property of an element
+
+        Args:
+            element (str): element to accept a value
+            text (str): value to set
+
+        Raises:
+            ActionException: Error writing to element
+
+        Example:
+            ```
+            main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
+            ```
+        """
+        try:
+            self.session_handle.findById(element).text = text
+
+        except Exception as ex:
+            raise exceptions.ActionException(
+                f"Error writing to element {element}: {ex}"
+            )
+
+    def read(self, element: str) -> str:
+        """
+        Reads text property
+
+        Args:
+            element (str): element to read
+
+        Raises:
+            ActionException: Error reading element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        draws red frame around the element
+
+        Args:
+            element (str): element to draw around
+            seconds (int): seconds to wait for
+
+        Raises:
+            ActionException: Error visualizing element
+        """
+
+        try:
+            self.session_handle.findById(element).Visualize(1)
+            sleep(seconds)
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error visualizing element {element}: {e}"
+            )
+
+    def send_v_key(
+        self,
+        element: str = "wnd[0]",
+        *,
+        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.
+        Example use is a pick button, that opens POP-UP window that is otherwise not visible as a separate element.
+
+        Args:
+            element (str): element to draw around, default: wnd[0]
+            focus_element (str | None): optional, element to focus on, default: None
+            value (int): number of VKey to be sent, default: 0
+
+        Raises:
+            ActionException: Error focusing or send VKey to element
+
+        Example:
+            ```
+            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()
+
+            self.session_handle.findById(element).sendVKey(value)
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error visualizing element {element}: {e}"
+            )
+
+    def read_html_viewer(self, element: str) -> str:
+        """
+        Read the HTML content of the specified HTMLViewer element.
+
+        Parameters:
+            element (str): The identifier of the element to read.
+
+        Returns:
+            str: The inner HTML content of the specified element.
+
+        Raises:
+            ActionException: If an error occurs while reading the element.
+
+        Example:
+            ```
+            html_content = main_window.read_html_viewer("wnd[0]/usr/cntlGRID1/shellcont[0]/shell")
+            ```
+        """
+        try:
+            return self.session_handle.findById(
+                element
+            ).BrowserHandle.Document.documentElement.innerHTML
+
+        except Exception as e:
+            raise exceptions.ActionException(f"Error reading element {element}: {e}")
+
+    def read_shell_table(self, element: str, load_table: bool = True) -> ShellTable:
+        """
+        Read the table of the specified ShellTable element.
+        Args:
+            element (str): The identifier of the element to read.
+            load_table (bool): Whether to load the table data. Default True
+
+        Returns:
+            ShellTable: The ShellTable object with the table data and methods to manage it.
+
+        Example:
+            ```
+            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()
+            ```
+        """
+        return ShellTable(self.session_handle, element, load_table)
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class Window +(connection: int, connection_handle: win32com.client.CDispatch, session: int, session_handle: win32com.client.CDispatch) +
+
+
+
+ +Expand source code + +
class Window:
+    def __init__(
+        self,
+        connection: int,
+        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 __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) -> None:
+        """
+        Restores sap window to its default size, resp. before maximization
+        """
+        self.session_handle.findById("wnd[0]").restore()
+
+    def close_window(self) -> None:
+        """
+        Closes this sap window
+        """
+        self.session_handle.findById("wnd[0]").close()
+
+    def navigate(self, action: NavigateAction) -> None:
+        """
+        Navigates SAP: enter, back, end, cancel, save
+
+        Args:
+            action (NavigateAction): enter, back, end, cancel, save
+
+        Raises:
+            ActionException: wrong navigation action
+
+        Example:
+            ```
+            main_window.navigate(NavigateAction.enter)
+            ```
+        """
+        if action == NavigateAction.enter:
+            el = "wnd[0]/tbar[0]/btn[0]"
+        elif action == NavigateAction.back:
+            el = "wnd[0]/tbar[0]/btn[3]"
+        elif action == NavigateAction.end:
+            el = "wnd[0]/tbar[0]/btn[15]"
+        elif action == NavigateAction.cancel:
+            el = "wnd[0]/tbar[0]/btn[12]"
+        elif action == NavigateAction.save:
+            el = "wnd[0]/tbar[0]/btn[13]"
+        else:
+            raise exceptions.ActionException("Wrong navigation action!")
+
+        self.session_handle.findById(el).press()
+
+    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) -> None:
+        """
+        Presses element
+
+        Args:
+            element (str): element to press
+
+        Raises:
+            ActionException: error clicking element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        Selects element or menu item
+
+        Args:
+            element (str): element to select - tabs, menu items
+
+        Raises:
+            ActionException: error selecting element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        Selects checkbox element
+
+        Args:
+            element (str): checkbox element
+            selected (bool): selected state - True for checked, False for unchecked
+
+        Raises:
+            ActionException: error checking checkbox element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        Sets text property of an element
+
+        Args:
+            element (str): element to accept a value
+            text (str): value to set
+
+        Raises:
+            ActionException: Error writing to element
+
+        Example:
+            ```
+            main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
+            ```
+        """
+        try:
+            self.session_handle.findById(element).text = text
+
+        except Exception as ex:
+            raise exceptions.ActionException(
+                f"Error writing to element {element}: {ex}"
+            )
+
+    def read(self, element: str) -> str:
+        """
+        Reads text property
+
+        Args:
+            element (str): element to read
+
+        Raises:
+            ActionException: Error reading element
+
+        Example:
+            ```
+            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) -> None:
+        """
+        draws red frame around the element
+
+        Args:
+            element (str): element to draw around
+            seconds (int): seconds to wait for
+
+        Raises:
+            ActionException: Error visualizing element
+        """
+
+        try:
+            self.session_handle.findById(element).Visualize(1)
+            sleep(seconds)
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error visualizing element {element}: {e}"
+            )
+
+    def send_v_key(
+        self,
+        element: str = "wnd[0]",
+        *,
+        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.
+        Example use is a pick button, that opens POP-UP window that is otherwise not visible as a separate element.
+
+        Args:
+            element (str): element to draw around, default: wnd[0]
+            focus_element (str | None): optional, element to focus on, default: None
+            value (int): number of VKey to be sent, default: 0
+
+        Raises:
+            ActionException: Error focusing or send VKey to element
+
+        Example:
+            ```
+            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()
+
+            self.session_handle.findById(element).sendVKey(value)
+
+        except Exception as e:
+            raise exceptions.ActionException(
+                f"Error visualizing element {element}: {e}"
+            )
+
+    def read_html_viewer(self, element: str) -> str:
+        """
+        Read the HTML content of the specified HTMLViewer element.
+
+        Parameters:
+            element (str): The identifier of the element to read.
+
+        Returns:
+            str: The inner HTML content of the specified element.
+
+        Raises:
+            ActionException: If an error occurs while reading the element.
+
+        Example:
+            ```
+            html_content = main_window.read_html_viewer("wnd[0]/usr/cntlGRID1/shellcont[0]/shell")
+            ```
+        """
+        try:
+            return self.session_handle.findById(
+                element
+            ).BrowserHandle.Document.documentElement.innerHTML
+
+        except Exception as e:
+            raise exceptions.ActionException(f"Error reading element {element}: {e}")
+
+    def read_shell_table(self, element: str, load_table: bool = True) -> ShellTable:
+        """
+        Read the table of the specified ShellTable element.
+        Args:
+            element (str): The identifier of the element to read.
+            load_table (bool): Whether to load the table data. Default True
+
+        Returns:
+            ShellTable: The ShellTable object with the table data and methods to manage it.
+
+        Example:
+            ```
+            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()
+            ```
+        """
+        return ShellTable(self.session_handle, element, load_table)
+
+

Methods

+
+
+def close_window(self) ‑> None +
+
+

Closes this sap window

+
+ +Expand source code + +
def close_window(self) -> None:
+    """
+    Closes this sap window
+    """
+    self.session_handle.findById("wnd[0]").close()
+
+
+
+def maximize(self) ‑> None +
+
+

Maximizes this sap window

+
+ +Expand source code + +
def maximize(self) -> None:
+    """
+    Maximizes this sap window
+    """
+    self.session_handle.findById("wnd[0]").maximize()
+
+
+
+def navigate(self, action: NavigateAction) ‑> None +
+
+

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

+

Args

+
+
action : NavigateAction
+
enter, back, end, cancel, save
+
+

Raises

+
+
ActionException
+
wrong navigation action
+
+

Example

+
main_window.navigate(NavigateAction.enter)
+
+
+ +Expand source code + +
def navigate(self, action: NavigateAction) -> None:
+    """
+    Navigates SAP: enter, back, end, cancel, save
+
+    Args:
+        action (NavigateAction): enter, back, end, cancel, save
+
+    Raises:
+        ActionException: wrong navigation action
+
+    Example:
+        ```
+        main_window.navigate(NavigateAction.enter)
+        ```
+    """
+    if action == NavigateAction.enter:
+        el = "wnd[0]/tbar[0]/btn[0]"
+    elif action == NavigateAction.back:
+        el = "wnd[0]/tbar[0]/btn[3]"
+    elif action == NavigateAction.end:
+        el = "wnd[0]/tbar[0]/btn[15]"
+    elif action == NavigateAction.cancel:
+        el = "wnd[0]/tbar[0]/btn[12]"
+    elif action == NavigateAction.save:
+        el = "wnd[0]/tbar[0]/btn[13]"
+    else:
+        raise exceptions.ActionException("Wrong navigation action!")
+
+    self.session_handle.findById(el).press()
+
+
+
+def press(self, element: str) ‑> None +
+
+

Presses element

+

Args

+
+
element : str
+
element to press
+
+

Raises

+
+
ActionException
+
error clicking element
+
+

Example

+
main_window.press("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
+
+
+ +Expand source code + +
def press(self, element: str) -> None:
+    """
+    Presses element
+
+    Args:
+        element (str): element to press
+
+    Raises:
+        ActionException: error clicking element
+
+    Example:
+        ```
+        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 read(self, element: str) ‑> str +
+
+

Reads text property

+

Args

+
+
element : str
+
element to read
+
+

Raises

+
+
ActionException
+
Error reading element
+
+

Example

+
value = main_window.read("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03")
+
+
+ +Expand source code + +
def read(self, element: str) -> str:
+    """
+    Reads text property
+
+    Args:
+        element (str): element to read
+
+    Raises:
+        ActionException: Error reading element
+
+    Example:
+        ```
+        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 read_html_viewer(self, element: str) ‑> str +
+
+

Read the HTML content of the specified HTMLViewer element.

+

Parameters

+

element (str): The identifier of the element to read.

+

Returns

+
+
str
+
The inner HTML content of the specified element.
+
+

Raises

+
+
ActionException
+
If an error occurs while reading the element.
+
+

Example

+
html_content = main_window.read_html_viewer("wnd[0]/usr/cntlGRID1/shellcont[0]/shell")
+
+
+ +Expand source code + +
def read_html_viewer(self, element: str) -> str:
+    """
+    Read the HTML content of the specified HTMLViewer element.
+
+    Parameters:
+        element (str): The identifier of the element to read.
+
+    Returns:
+        str: The inner HTML content of the specified element.
+
+    Raises:
+        ActionException: If an error occurs while reading the element.
+
+    Example:
+        ```
+        html_content = main_window.read_html_viewer("wnd[0]/usr/cntlGRID1/shellcont[0]/shell")
+        ```
+    """
+    try:
+        return self.session_handle.findById(
+            element
+        ).BrowserHandle.Document.documentElement.innerHTML
+
+    except Exception as e:
+        raise exceptions.ActionException(f"Error reading element {element}: {e}")
+
+
+
+def read_shell_table(self, element: str, load_table: bool = True) ‑> ShellTable +
+
+

Read the table of the specified ShellTable element.

+

Args

+
+
element : str
+
The identifier of the element to read.
+
load_table : bool
+
Whether to load the table data. Default True
+
+

Returns

+
+
ShellTable
+
The ShellTable object with the table data and methods to manage it.
+
+

Example

+
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()
+
+
+ +Expand source code + +
def read_shell_table(self, element: str, load_table: bool = True) -> ShellTable:
+    """
+    Read the table of the specified ShellTable element.
+    Args:
+        element (str): The identifier of the element to read.
+        load_table (bool): Whether to load the table data. Default True
+
+    Returns:
+        ShellTable: The ShellTable object with the table data and methods to manage it.
+
+    Example:
+        ```
+        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()
+        ```
+    """
+    return ShellTable(self.session_handle, element, load_table)
+
+
+
+def restore(self) ‑> None +
+
+

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

+
+ +Expand source code + +
def restore(self) -> None:
+    """
+    Restores sap window to its default size, resp. before maximization
+    """
+    self.session_handle.findById("wnd[0]").restore()
+
+
+
+def select(self, element: str) ‑> None +
+
+

Selects element or menu item

+

Args

+
+
element : str
+
element to select - tabs, menu items
+
+

Raises

+
+
ActionException
+
error selecting element
+
+

Example

+
main_window.select("wnd[2]/tbar[0]/btn[1]")
+
+
+ +Expand source code + +
def select(self, element: str) -> None:
+    """
+    Selects element or menu item
+
+    Args:
+        element (str): element to select - tabs, menu items
+
+    Raises:
+        ActionException: error selecting element
+
+    Example:
+        ```
+        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 send_v_key(self, element: str = 'wnd[0]', *, 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. +Example use is a pick button, that opens POP-UP window that is otherwise not visible as a separate element.

+

Args

+
+
element : str
+
element to draw around, default: wnd[0]
+
focus_element (str | None): optional, element to focus on, default: None
+
value : int
+
number of VKey to be sent, default: 0
+
+

Raises

+
+
ActionException
+
Error focusing or send VKey to element
+
+

Example

+
window.send_v_key(focus_element="wnd[0]/usr/ctxtCITYC-LOW", value=4)
+
+
+ +Expand source code + +
def send_v_key(
+    self,
+    element: str = "wnd[0]",
+    *,
+    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.
+    Example use is a pick button, that opens POP-UP window that is otherwise not visible as a separate element.
+
+    Args:
+        element (str): element to draw around, default: wnd[0]
+        focus_element (str | None): optional, element to focus on, default: None
+        value (int): number of VKey to be sent, default: 0
+
+    Raises:
+        ActionException: Error focusing or send VKey to element
+
+    Example:
+        ```
+        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()
+
+        self.session_handle.findById(element).sendVKey(value)
+
+    except Exception as e:
+        raise exceptions.ActionException(
+            f"Error visualizing element {element}: {e}"
+        )
+
+
+
+def set_checkbox(self, element: str, selected: bool) ‑> None +
+
+

Selects checkbox element

+

Args

+
+
element : str
+
checkbox element
+
selected : bool
+
selected state - True for checked, False for unchecked
+
+

Raises

+
+
ActionException
+
error checking checkbox element
+
+

Example

+
main_window.set_checkbox("wnd[0]/usr/chkPA_CHCK", True)
+
+
+ +Expand source code + +
def set_checkbox(self, element: str, selected: bool) -> None:
+    """
+    Selects checkbox element
+
+    Args:
+        element (str): checkbox element
+        selected (bool): selected state - True for checked, False for unchecked
+
+    Raises:
+        ActionException: error checking checkbox element
+
+    Example:
+        ```
+        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 start_transaction(self, transaction: str) ‑> None +
+
+

Starts transaction

+

Args

+
+
transaction : str
+
transaction name
+
+
+ +Expand source code + +
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 visualize(self, element: str, seconds: int = 1) ‑> None +
+
+

draws red frame around the element

+

Args

+
+
element : str
+
element to draw around
+
seconds : int
+
seconds to wait for
+
+

Raises

+
+
ActionException
+
Error visualizing element
+
+
+ +Expand source code + +
def visualize(self, element: str, seconds: int = 1) -> None:
+    """
+    draws red frame around the element
+
+    Args:
+        element (str): element to draw around
+        seconds (int): seconds to wait for
+
+    Raises:
+        ActionException: Error visualizing element
+    """
+
+    try:
+        self.session_handle.findById(element).Visualize(1)
+        sleep(seconds)
+
+    except Exception as e:
+        raise exceptions.ActionException(
+            f"Error visualizing element {element}: {e}"
+        )
+
+
+
+def write(self, element: str, text: str) ‑> None +
+
+

Sets text property of an element

+

Args

+
+
element : str
+
element to accept a value
+
text : str
+
value to set
+
+

Raises

+
+
ActionException
+
Error writing to element
+
+

Example

+
main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
+
+
+ +Expand source code + +
def write(self, element: str, text: str) -> None:
+    """
+    Sets text property of an element
+
+    Args:
+        element (str): element to accept a value
+        text (str): value to set
+
+    Raises:
+        ActionException: Error writing to element
+
+    Example:
+        ```
+        main_window.write("wnd[0]/usr/tabsTABTC/tabxTAB03/subIncl/SAPML03", "VALUE")
+        ```
+    """
+    try:
+        self.session_handle.findById(element).text = text
+
+    except Exception as ex:
+        raise exceptions.ActionException(
+            f"Error writing to element {element}: {ex}"
+        )
+
+
+
+
+
+
+
+ +
+ + + \ 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()