Releases: fnxL/sapwright
Releases · fnxL/sapwright
Release list
v0.0.2
[0.0.2] - 2026-10-01
📚 Documentation
- Fix typo
⚡ Performance
- Write text directly before validating in set_text
🚜 Refactor
- Move types-pywin32 to type-check group
- Drop psutil and pywinauto
- Replace pydantic models with dataclasses
- Delete typing_extensions.override
- Drop no-op @DataClass from SAPLoginScreenElements
- Use DEFAULT_TIMEOUT for launch_saplogon timeout
- Simplify GuiComponent.matches
- Replace ConnectionManager class with functions
- [breaking] Drop header filters from get_table_headers
🧪 Testing
- Update test_utils
⚙️ Miscellaneous Tasks
- (release) V0.0.2
v0.0.1
[0.0.1] - 2026-09-30
🚀 Features
- Add sap logon launcher utils
- Add exceptions.py
- Add custom sap exceptions
- (utils) Add get_scripting_engine method
- Add GuiComponentType and VKey enums
- Add connection manager
- (objects) Add GuiComponent wrapper for SAP GUI elements
- Add StatusBarMsg and SessionInfo models
- (objects) Add GuiSession wrapper
- Add overloads for find_by_id
- Add raise_for_status method to GuiSession
- Add Sapwright entry point with SAP login handling
- Add close_connection method to connection manager
- Add title method to GuiSession object
- Add close_connection method to close all sessions at once
- Log off via /nex in Sapwright.close_connection
- Add close_connection by '/nex' command and alis close_all_sessions methods to GuiSession
- Auto-change password on login with a configurable password generator
- Type-safe find_by_id with expected_type wrapper classes
- Add GuiTableControl, GuiComponentCollection, and GuiScrollbar com wrappers
- Add GuiShell wrapper for shell/custom controls
- Add title-case COM aliases and wrap children objects in collections
- Add GuiTableControl.refresh which re-finds the underlying COM object by id
- Add GuiSession.maximize to maximize the main window of the session
- Add GuiTableControl.get_table_headers for column name-to-index mapping
- Make GuiTableRow indexable and iterable over its cells
- Eagerly cache column headers on GuiTableControl contruction
- Auto-scroll when get_absolute_row targets a hidden row
🐛 Bug Fixes
- Export GuiSession class
- Change type of text setter value param to Any
- Wrap com session objects in GuiSession wrapper
- Set defaults for SessionInfo and add scripting_mode_force_notification property
- Use local date in default password generator
- Expose GuiTableControl.headers as read-only property
📚 Documentation
- Update README.md
🚜 Refactor
- Rename component.matches internals to avoid pyright cycle/private-use warnings
- Merge GuiComponentCollection into component.py, drop collection.py
- Remove unused exception variable
🧪 Testing
- Add tests for is_process_running util
- Add nofaulthander ptyest setting to suppress dump for windows fatal exception
- Add sap settings and create session fixture for entire test session
- Use session.close_connection to cleanup
- Test start_transaction and end_transaction
- Fix pytestmark
⚙️ Miscellaneous Tasks
- Add ci github workflow
- Update ci workflow to run on push to specific paths
- Add pyproject.toml
- Create tests dir
- Add pywinauto and disable some linting rules
- Run type-check job on windows-latest
- Remove pytest nofaulthandler setting
- Format README.md
- Add test job in CI and remove windows-latest jobs
- Use windows-latest runtime
- Format files
- Remove basedpyright step from lint job
- Run ci on specific paths
- Add release workflow
- Remove smoke test
💼 Other
- Ignore tests directory from basedpyright analysis
- Disable reportExplicitAny
- Disable reportUnannotatedClassAttribute
- Disable reportUnusedCallResult
- Add types-pywin32