# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/). ## 3.28.0 Released on 27-06-2025 ### Added - calls to Aiviro Reader Service endpoint v2 for InvoiceReader - support with logging for pyfreerdp4.0 into `aiviro-cli test-connection rdp` command - arguments into Aiviro Exception to contain detailed information - integration of API for the new Aiviro-Reader Service - bar-codes and QR-codes modules to actions ### Changed - configuration `GlobalConfig` into Pydantic model `AiviroConfig` - logging context, to always create unique folder for each script-run ### Fixed - deployment of Gradio apps, due to invalid dependency version - generating local stats by reading timestamp correctly - closing of `StreamingService` for `StaticRobot` - prevent clicking on masked areas during empty space detection in move_away action ### Removed - folder with unused demo-scripts from the repository ## 3.27.3 Released on 22-05-2025 ### Added - pyInstaller hook for automatic collection of package data files when building desktop applications ### Changed - request timeout for '/invoice' endpoint to 3 minutes - default request timeout from 30 to 60 seconds ## 3.27.2 Released on 09-05-2025 ### Added - custom initialization scripts support via init.d directory for agent deployment ### Changed - dependency versions for `[email]` extra, update them - internal passing of param `robot_id` in Actions ### Fixed - flow runs duplication when created from prefect ## 3.27.1 Released on 11-04-2025 ### Added - action `set_target_fps` and `get_target_fps` for robot - small optimization in `LoopUpService` to instantly process `Area` objects ### Changed - internal logic of calculating target and real FPS ### Fixed - missing Authorization header in snapshot upload-client - missing `version` key, which was pop in v2 RDP robot ## 3.27.0 Released on 08-04-2025 ### Added - extraction of `note` field from isdoc file - saving output for local stats and raw output for prefect stats - refactor of commands and its internal usage - option for single mask as argument in `set` command - `retry-after` header processing for 503 responses - deprecation warnings for unused masks and working areas methods - support for requests to llm-service endpoints added into `CloudClient` - extra dependencies for Desktop & Web robot, same as RDP works ### Changed - renamed `commands` to `actions` - versions of extra dependencies for Desktop, Web & PDF robot ### Fixed - correct division of report and error logs for prefect log analysis - references in documentation ### Removed - configuration loading from .env file for server & agent deployment - option to use `docker-compose` command, use only `docker compose` ## 3.26.0 Released on 14-03-2025 ### Added - unified cloud client for making requests to the backend server for all services - email notification of custom scenario metric as a percentage - support for pyfreerdp 4.0.0 - `create_rdp_robot_v2` that supports pyfreerdp 4.0.0 - close & create logic for running-device in case it fails - deployment examples for prefect server ip & agent multiple environments ### Changed - parameter `metric` of the decorator `step` to type `StepMetric` ### Fixed - parsing of isdoc file with multiple tax-rates, selects total tax value - `KeyError` in cache hdf5 file - validation tests for Reader, table splits - references for reader objects in documentation - missing default value for `extras_areas` argument in `WorkingAreaAsIntersection` ### Deprecated - method `create_rdo_robot` ### Removed - support for python3.8 & python3.9 - more than a year deprecated functionality - `NotifierManager`, use only `EmailNotifier` instead - old implementation of Reader - `Universal Parser` - `text_find_methods` variable in Aiviro - command `add_mask_by_boundaries`, use `BoundaryArea` - command `add_mask_by_margin`, use `CustomBox` - command `set_working_area_by_boundaries`, use `BoundaryArea` ## 3.25.0 Released on 12-02-2025 ### Added - method `set()` into the BaseRobot to create working areas and masks - new objects - `Mask`, `MaskByDisplay`, `MaskWindowsTaskbar`, `WorkingArea`, `WorkingAreaByDisplay`, `WorkingAreaByGrid`, `WorkingAreaAsIntersection` - wait logic for 60 seconds to ensure the device (RDP) is in a running state after establishing the connection - `execute_as_powershell_script` method into `ShellCommands` to execute any length of command as a PowerShell script. - new structure and attributes for InvoiceData's customer and vendor - `InvoiceCustomer`, `InvoiceVendor` - new parameter into the `ReaderConfig` - `known_customer_tax_id`, `known_vendor_tax_id` ### Fixed - parsing more than one bank account in InvoiceReader - incorrectly assigning customer's data as vendor's and vice versa ### Deprecated - `set_working_area` method in `BaseRobot` - `set_working_area_by_grid` method in `BaseRobot` - `set_working_area_as_intersection` method in `BaseRobot` - `add_mask` method in `BaseRobot` - `add_mask_by_display` method in `BaseRobot` - `add_mask_windows_taskbar` method in `BaseRobot` ## 3.24.2 Released on 31-01-2025 ### Added - retry logic if screen isn't stable for way too long - device running health-check after successful reconnection ### Fixed - changes of the page size when image or text is added into PDF ## 3.24.1 Released on 24-01-2025 ### Added - additional logging into `InvoiceReader`, to see which internal-processor is currently running ### Fixed - handling of error-responses from CloudProcessor, reduce tries & stop in case of server error ## 3.24.0 Released on 15-01-2025 ### Added - installation of the odbc sql driver when deploying Aiviro agent - detailed usage of applying masks and working areas with picture examples - `threshold` argument into `check_elements_color` - processing of tables from Cloud response in `InvoiceReader` - parsers for search of tax recapitulation in the invoice tables - implicit rdp-connection restart in case of network failure - separate exceptions for child-process errors - using pyproject.toml for project's build configuration ### Changed - installation of all optional dependencies via new key `all` instead of `all_extras` ### Fixed - parsing of ICO attribute in InvoiceReader - windows script-file encoding in PowerShell commands - search for a predict element with an EXCLUSIVE find-method - normalization email's file-attachment name containing whitespace characters - `see` command with `assert_not=True` when SearchObjectError is raised internally - decoding of `EF` pdf section as `` containing file-attachments ## 3.23.1 Released on 18-11-2024 ### Added - additional keywords and logic to improve PDF cutting - check into runner-process to see if device is still running - reading exchange rate into the InvoiceReader when processing pdf invoices ### Fixed - log warning instead of raising an exception when display-mask is out of the screen boundary - `convert_to_decimal` to remove whitespace characters from the input string - `AttributeError` in cloud processor when extracting currency code ## 3.23.0 Released on 25-10-2024 ### Added - reading secondary totals from ISDOC files via InvoiceReader - `aiviro-cli deploy toolkit` for deploying Reader, Image Recognition, and other services in one gradio app - `merge_files_into_pdf` method into `PDFRobot` to merge multiple PDF or Image files into a single PDF file - two columns into prefect stats report markdown_report & markdown_error - `cut_pdf_to_valid_pages` method into `PDFRobot` to cut a PDF file to valid pages only - ability to read primary and secondary totals and currencies via InvoiceReader ### Changed - reading prefix of the local bank account to 2-6 characters - merge `excel` extra requirement into `reader` ### Fixed - `TypeError: cannot pickle '_regex.Match' object` error when using `RegexText` - requests to Reader server, re-open file with each failed request to prevent 422 http-error - raise exception `RequestFailedException` when APIClient stops retrying request to the server ## 3.22.0 Released on 10-10-2024 ### Added - command to extract text & ui elements from an image `get_raw_elements` - doc-example into `PDFRobot` `get` command to extract all texts or words from a page - invoiceField to indicate if vendor is not a tax payer into InvoiceReader - convertors module, to convert string into Decimal, Datetime and to convert result if `get` command - documentation section `Aiviro Utilities > Convertors` - enhanced quality of reading bank accounts in InvoiceReader - searching for more than one order number per page in pdf when using InvoiceReader - gradio Explorer into deployment as a separate service - `aiviro-cli log stats` command for generating statistics using local & prefect logs - section of scenario performance metrics into email-notification - `metric` argument into `@step` decorator to define custom metrics for a scenario - `email_metrics` argument into `send_report` method in EmailNotifier to include performance section in email - additional keywords and logic for DueDate in InvoiceReader ### Changed - internal implementation of bound-box to Pydantic 2.0 - interface of Gradio Explorer app - disallowing empty title & content for Notification blocks & messages - update pre-commit to use ruff instead of other linters ### Fixed - value-error while converting IBAN to Local account bank number - filtering of already used IDs and tax IDs when using InvoiceReader - print format of BoundBox in logger - parsing of old-format of run-folders - merging of `YAMLConfig` objects ## 3.21.2 Released on 16-09-2024 ### Added - enhanced reading of due dates in InvoiceReader via checking payment term or texts like "payable in XX days" - removal of all Unicode characters at the beginning of the text for text normalization, instead of just the first character - getting company name from ARES' response when parsing invoice via InvoiceReader ### Fixed - calculation of wait-time for new screen, change negative value to 0 - normalization of email attachment's name in Outlook connector ## 3.21.1 Released on 09-09-2024 ### Added - field for local-bank-account in reader-client app ### Fixed - search-settings for order-number in reader-client app, now search through every page ### Removed - previously added check if device is running, due to failures in production ## 3.21.0 Released on 27-08-2024 ### Added - check for correctness of a parsed IBAN - `PDFRobot` now uses dynamically calculated DPI for better handling of PDFs with different page sizes. - improvements in Reader's ability to read tax IDs - path attribute for str/repr into Image search-object - the `tmp_folder` attribute for `BaseScenario` which enables automatic creation of temporary folder(s) for the scenario - the `__auto_folder` option which automatically creates shared-folder in RDPRobot via YAML configuration file ### Changed - to unidecode and lowercase comparison of identifiers and reader's items ### Fixed - currency reading (especially invoices with multiple currencies) - fixed bug that application tried to interact with already closed robot - saving email with empty subject - runtime-error when closing robots in scenario - dictionary size changed ## 3.20.5 Released on 16-08-2024 ### Added - additional build checks for aiviro build-documentation job ### Fixed - condition statement, which allowed passing empty TZ variable to the agent-container - missing references in aiviro documentation ## 3.20.4 Released on 15-08-2024 ### Fixed - calculation of waiting time for taking new screenshots & screen stability ## 3.20.3 Released on 12-08-2024 ### Added - normalization of the email's attachments' filenames (especially characters like '/', '\', etc.) - logging for _before_run & _after_run methods in scenario - option to start scenario in `with` statement ### Changed - moved `mypy` parameters from CI to `pyproject.toml` ### Fixed - fixed error in automatic closing of `aiviro` which in some cases could cause a infinite hang - incorrect parsing of invoice & due-date in the invoice - `Windows fatal exception`, when detecting QR codes in `pyzbar` library - encoding problem in PowerShell `create_and_copy_powershell_script` command on Windows ## 3.20.2 Released on 17-07-2024 ### Added - `TZ` variable into agent docker-compose to set the timezone for the agent container ### Changed - identifier of `FindMethod` in cache-context from value to attribute-name ### Fixed - `aiviro-cli log generate` creates output folder if it doesn't exist ## 3.20.1 Released on 08-07-2024 ### Added - more detailed logging for API requests ### Changed - value of `skip_waiting` to `None` for `go_to_url` command ### Fixed - endless loop in streaming waiting for new image, in case stream is closed - filtering of word-boxes with single character `€` - cI build for python package, CentOS 7 reached EOL - video streaming for Static-Robot-Runner (PDF Robot) ## 3.20.0 Released on 26-06-2024 ### Added - conversion for Aiviro Reader's IBAN to a bank account, and vice versa - new log folders for statistics and data-storage - description into `@step` decorator - `error_step` attribute to access failed step in `get_run_context` method - `Logging` section into documentation - calculation of the net-amount for items in the `InvoiceReader` - warning message when custom api-url is used - best-practices for dataclasses and pathlib into docs - docs for `ISDOCProcessor`, `Parsers` examples - docs about key-value search into tips & tricks section - working-area into the debug images (search-object service result) - working-area into robot's video stream - option for `clear_and_type` & `clear_text` to accept None as element value - `webdriver_type` argument into `create_web_robot` to support additional web browsers - Firefox, Edge, Safari - `webdriver_path` argument into `create_web_robot` to override the default path to the web-driver ### Changed - structure of the log folders, 3 separate folders - `runs`, `stats`, `storage` - default value of maximum disk-size of logs to 20GB - default value of maximum number of log-files to unlimited (limited by disk_size) - primarily unit-price net-amount is extracted from .isdoc files - internal arguments for robot's initialization method ### Fixed - deployment of gitlab-pages in CI, caused by too big artifacts - user-normalization, apply it only when `USER_NORMALIZATION` find-method flag is set - empty item-line in `.isdoc` document - improvements in reader's accuracy (mainly tax-date & order-numbers) ### Deprecated - setting `webdriver_path` in configuration file, it's loaded now automatically from $PATH ## 3.19.0 Released on 15-05-2024 ### Added - `--project-name` argument for `deploy agent start` command, to set prefect project name - `deploy agent start-env` command to start an agent using existing .env file - `AUTO` and `DYNAMIC` option for `find_method` - additional keywords for order-number search in Reader - option to ignore_keywords search in InvoiceReader for order-number search - item-identifiers & tags/category search for `InvoiceItem` - simpler (client's version) of gradio Aiviro Reader app - processing of `.isdoc` files into InvoiceReader - new option into aiviro.find_method CASE_SENSITIVE ### Changed - default `find_method` option from `SIMILAR` to `AUTO` in search-objects - attribute `extra` to `extra_comparable` instead, for BoundBox hash calculation - same as __eq___ - [breaking] logic for text/element search - timeout for pdf conversion to images from 30 to 60 seconds - normalization of words, first and last characters with length in bytes >= 3 are removed - words with only one character which length in bytes >= 3 are removed - default value of arguments in `start_process` command, `use_likely_area` - False to True, `sleep_time` - 0 to 1 - text search, by default as CASE_INSENSITIVE - logic for element-search, now only element and text are checked (before element, other type of elements, text) - "improved `InvoiceReader` accuracy of DUZP field" ### Fixed - `ModuleNotFoundError('No module named /root/')` exception when agent-container is restarted - problem of text merging for icons - extraction of unresolved pdf-attachments - split sentence if texts have too different heights (vertical vs horizontal texts) - duplicated sentences when prediction element splits a sentence ### Deprecated - option `CASE_INSENSITIVE` in find-method, it's default option now ### Removed - assertions in pdf processing, replace them with PDFError exception ## 3.18.1 Released on 14-04-2024 ### Fixed - encoding in mime-multipart emails, from utf8 to utf-8 ## 3.18.0 Released on 04-04-2024 ### Added - `builder` Gradio app for creating HTML robot's reports - `explorer` Gradio app for exploring robot's logs - `video` aiviro-cli command to generate video from robot's logs - automatic image resize for bigger than 3350x4750x3 pixels, before sending to server - documentation example for @step and @staticmethod - processing of other content-types from smime.p7m files - method `as_imap_message` to convert 'message/rfc822' attachment into `IMAPMessage` object ### Changed - allow usage of recipients arguments in `EmailNotifier.send_email` method ### Fixed - digital PDF parsing for words containing only `_` (underscore) characters - closing of streaming-service, handling of ValueError if process is still running - empty text-body of email from imap-basic-auth, extract text from html-body - closing streaming in case of exception - exception for script without initialized logging - handling of negative sleep time in `RunnerProcess` - `IMAPMessage` empty-None subject, by default now set to empty string ## 3.17.3 Released on 12-03-2024 ### Added - `nano` tool into agent docker-container ### Changed - version of CI python-docker image to 3.11 from 3.9 - versions of pre-commit packages to the newest ### Fixed - unexpectedly PDF robot switching to OCR, due to missing mask-removal update - sorting of boxes from sub-image search, sort them by position instead of matching-score ## 3.17.2 Released on 07-03-2024 ### Added - retry for `TimeoutError('Screen wasn't updated for way too long.')` - error message when main process ends unexpectedly ### Changed - version of pypdf package dependency from 4.0.1 to 3.16.1 due to file corruption problem ### Fixed - fix closing of shared memory process - encoding problem of `ErrorHandler` on Windows - including content of invoice item (text content) into `InvoiceItem` dataclass - starting deployment server without running docker service - logging of `robot-id` attribute into logs ## 3.17.1 Released on 21-02-2024 ### Changed - `@step` can be used also without `BaseScenario` running ### Fixed - formatting of documentation for rdp shared-folder ## 3.17.0 Released on 19-02-2024 ### Added - two methods into `RDPRobot` for working with shared-folder, `local_shared_folder` & `remote_shared_folder` - new tab "convert-csv" into reader Gradio app ### Changed - repository for `pylint` tool in pre-commit - new versions for all pre-commit tools - versions of all dependencies (update them) ### Removed - singleton pattern from `LoggingContext` class ## 3.16.0 Released on 02-02-2024 ### Added - unique identifier for each run of aiviro-script (run-id) - run-id into logs name and email report content - localization for aiviro package (cs_CZ, sk_SK, de_DE, en_US) - post-processing of invoice items into `InvoiceReader` - reading of missing "variable-symbol" from QR code - datetime information into .eml files for email messages - support for np.ndarray as argument in `Image` search-object - additional logging methods, `stop_logging`, `get_logger`, `get_logger_advanced`, `disable_logger` - `@step` decorator into template module, to separate script into logical blocks - new logging attributes as 'step_name', 'step_id', 'step_run_id' ### Changed - visual design and structure of the email report - internal structure & implementation of the `logging` module - documentation section "Utility methods" to "Aiviro Utilities" & restructure it - name of "Template" section to "Scenario Structure" & add documentation for `@step` decorator ### Removed - ares-utils dependency as old ARES API is not supported anymore ## 3.15.2 Released on 18-12-2023 ### Added - option for agent container to install requirements.txt, using `ENABLE_REQUIREMENTS_INSTALLATION` variable ### Fixed - starting script of the agent docker container ## 3.15.1 Released on 14-12-2023 ### Changed - deprecated warning for `skip_waiting` argument, it shows only once ### Fixed - current working-directory in agent-container ## 3.15.0 Released on 12-12-2023 ### Added - exception for agent-container & aiviro-package version mismatch - logging capability into `EmailNotifier` - new doc section "Integration Process" - additional tips and tricks from Aiviro Cookbook - new "Best Practices" section from Aiviro Cookbook - local deployment of Aiviro into documentation - new `wait` argument, instead of `skip_waiting` allowing numeric argument to call `time.sleep` function - `sleep_time` argument into `type_*` commands, to sleep between every sub-action, e.g. click, key-shortcut, ... - restriction of maximum size of a single PDF page, to 3350x4750 pixels - constants section into documentation - `SCENARIO_CONFIG_FOLDER_PATH` available from `aiviro.*` module, to access the configuration folder - `--old-deployment` option to `aiviro-cli create scenario` command - customer & vendor IČO fields into InvoiceReader - additional fields into InvoiceReader - customer & vendor name, shipping address & amount due - implicit utf-8 encoding for `aiviro-cli create scenario` command - additional group-context into `CacheService` to save results separately for each group (digital PDF or OCR) - read smime.p7m files from outlook - documentation how to add additional handlers into aiviro logging - unencrypted option for SMTP server (port 25) - new command `clear_working_area_and_screen_masks` into robots ### Changed - hierarchy in documentation based on sections priority - naming from subscriber to customer, supplier to vendor for InvoiceReader - name of parameter `-pn` to `-pf` in `aiviro-cli create scenario` command - internal implementation of switching between digital PDF and OCR texts ### Fixed - long block's title in the notification email - deployment of several flows at once - clearing of working area and masks in `InvoiceReader` ### Deprecated - the `NotifierManager` class ### Removed - `Xlib` dependency - path to aiviro-config file from Flow template ## 3.14.0 Released on 31-10-2023 ### Added - exchangeLib protocol into `EmailClient` - new functionality into Gradio Reader app - cli connectivity test for RDP robot - pre-commit check & installation when creating Aiviro project - new improved implementation of Aiviro Reader - documentation with code examples of main story, email extractor, erp handler and pdf reader - auto-language detection for `InvoiceReader` ### Changed - new logos in the documentation ### Fixed - removal of old records from cache - pre-commit error when new Aiviro project is created - fix a value of max disk size of logs to 5GB, when in docker and initially set to 0 - missing page size for empty Invoice page - missing confidence value in Invoice fields - parsing exception of "tax_date" in Reader ### Deprecated - old implementation of Aiviro Reader (Universal Parser) ### Removed - `find_utils` unused sub-module from `reader` module - `aiviro-cli reader find` command ## 3.13.3 Released on 20-10-2023 ### Fixed - converting of Decimal number in Czech QR codes - build of prefect-agent & correct version of chromedriver - exceptions which occur in child process are now properly transferred to main process for handling. - handling of ConnectionError in the Microsoft Graph API calls - loading of aiviro-config in prefect `AiviroNotifyTask` ## 3.13.2 Released on 18-10-2023 ### Added - `plain_login` argument into `imap_basic_auth` to allow utf-8 login authentication ### Changed - base docker-image from python3.8 to python3.11 for prefect-agent ### Fixed - version of google-chrome and chromedriver in prefect-agent - handling of 404 client error from Microsoft Graph API ## 3.13.1 Released on 13-09-2023 ### Added - flag `docker-compose` into deployment commands to use `docker-compose` command - `execute_script` command into WebRobot - raise of RuntimeError when robot was closed and user tries to use it ### Changed - by default `docker compose` (plugin version) is used in aiviro-cli deployment commands - cumulative enum implementation to be an extension of python builtin enum type ### Fixed - loading of aiviro-config in flows - ci pipeline for prefect-agent build - loading of yaml and aiviro configuration files correctly from old environment variables - converting of total-amount string to Decimal in UniversalParser ## 3.13.0 Released on 23-08-2023 ### Added - public method `clean` for every context-manager to clean up after itself - `ErrorHandler` for saving and processing image & text logs when error occurs - `aiviro-cli test-connection` commands for testing IMAP & SMTP server configurations - unencrypted IMAP mailbox support - parsing of bank-account information into `UniversalParser` - parsing of due-date information into `UniversalParser` - parsing of company-name, based on IČO, into `UniversalParser` - separate reader analysis for OCR and Digital pdf documents - `server` and `agent` deploy command into `aiviro-cli deploy` - deployment section into documentation - docker build into CI for prefect agent & ui - error handling for invalid metadata-log records, skip them - type restriction, arguments of `WaitUntilDisappear` can only be of type `SearchObject` - `aiviro-cli config` command to set-up api credentials and other settings - `delete_folder` method into `EmailClient` class ### Changed - context-manager logic from decorator into separate class - loading strategy of aiviro-config files, several options are now available - alignment of boxes in one line, added threshold for which the alignment is ignored ### Fixed - context-manager for setting working-area while other context-manager is active - qr-code decoding for empty values - pip dependency backtracking issue - empty string argument in Notifier message object - adding text into PDF when exception occurs - recursion bug when using `BaseKey` in interactive console - empty file processing in `EmailExtractor` - rendering of email's report for desktop Outlook - attribute access in cache-file if attribute does not exist ### Deprecated - environment variable "AIVIRO_CONFIG" ### Removed - deprecated email-client methods `setup_imap` and `setup_smtp` ## 3.12.0 Released on 03-07-2023 ### Added - bigger retry-waiting time for sending email - standard BoundBox output for UniversalParser lookup objects - post-processing method for UniversalParser lookup objects - auto-rotation functionality of scanned documents into `PDFRobot` - outlook authentication token refresh, if 401 is returned - merge functionality for `YAMLConfig` - `wait_until_ready` method for `RDPRobot` - `BaseScenario` object that helps with initialization of some basic Aiviro services - support for custom split-condition argument in document items detection - `no-verify` argument for ssl certificate verification in SMTP & IMAP basic-auth email methods - dynamic repack of the cache to reduce its disk-size ### Changed - default endpoint from "api.*.aiviro.com" to "api.aiviro.com" in doc & config file ### Fixed - pSKeyword error while loading pdf-file - handling of ReadTimeout exception for api-calls - adding text to an empty scanned PDF file - improved accuracy of total-amount extraction - recursive loading of Outlook email attachments - streaming initialization error - handling of locked cache file - pDFRobot closing in global-context object - dynamic removal of cache records (time reduction) ### Removed - old request structure to api.aiviro.com endpoints ## 3.11.2 Released on 10-05-2023 ### Fixed - encoding of PDF attachments - position recalculation when adding text or image into PDF file ## 3.11.1 Released on 03-05-2023 ### Added - `aiviro-cli deploy` command to deploy certain Aiviro functionality as a web application - exception handling in global-context, when service cannot be closed properly ### Fixed - read error of non-existing temporary folder ## 3.11.0 Released on 25-04-2023 ### Added - extraction of attachments & comments from PDF file - new properties `attachments` and `comments` into `PDFRobot` - documents item parsing into UniversalParser - lazy loading of PDF files for text or image addition - oneDrive module which allows to perform basic operations on user, shared and sites drives - functionality to add new-column in `CSVWriter` - excel module to read .xlsx files - documentation examples for `NotifierManager` - test into CI for default dependency imports - inactive option (gray color) for notifier ### Changed - dependency from PyPDF4 to pypdf - longer waiting/retry time for api requests (up to 5 minutes in total) - `CSVWriter` can be initialized also with empty `PDFRobot` - documentation for `EmailNotifier` ### Fixed - loading of PDF files with invalid structure - improved order-number extraction in universal-parser - warning message about package versions in `aiviro-cli log` command - closing of streaming service when communication pipe between processes is broken - long compression time of complex png images ## 3.10.0 Released on 14-03-2023 ### Added - `pause` & `unpause` methods into robot - `get_last_image` method into ImageCollector service - unit-tests for runner-service - `__add__` method for CumulativeEnum object, used in `BaseKey` - activate robot method into dynamic robots - missing metrics into global-context ### Changed - code structure of how streaming is started ### Fixed - bug with token normalization replacing wrong elements - initialization of RDP shared-folder, when only path is provided without path-name ## 3.9.2 Released on 02-03-2023 ### Fixed - `PDFRobot` failing to read some pdfs - `PDFRobot` spliting words at some unicode chars - `IndexError` exception while parsing total_amount ## 3.9.1 Released on 28-02-2023 ### Added - documentation for `universal-parser` module - new version of Universal Parser - additional tests for universal-parser - improve universal-parser performance ## 3.9.0 Released on 13-02-2023 ### Added - access to created working-area & display masks by `with` statement - `last_block` variable into `NotifierManager` - `send_report` method in `NotifierManager` to send messages across all notifiers based on scope - `oauth2` authentication for SMTP & IMAP into EmailClient - .coveragerc file to improve code coverage - evaluation test for universal-parser - global-context object that contains information about script & correctly closes robots & services - additional metadata into aiviro-metrics - method `as_file_attachment` to convert `IMAPMessage` into `IMAPAttachment` - support for processing `IMAPAttachment` in send_email method - point into image-logs for click commands - unit-tests for desktop, rdp & web devices - additional methods for easier PDF annotation - new search-object `Biggest` - argument `ignore_exception` into QR code decoder, to ignore invalid codes - text extraction from body of HTML email content into `email.text` variable - renaming of aiviro processes (on linux only) for better debugging ### Changed - updated project metadata information - documentation for Email's Outlook OAuth2 ### Fixed - logic for selecting correct working-area by checkpoints - default parameter of `send_report` in `EmailNotifier` ### Removed - support for python3.7 ## 3.8.0 Released on 29-12-2022 ### Added - command `add_mask_windows_taskbar` to cover windows taskbar - `strict` argument into `check_are_intersecting` command - `NotifierManager` to share messages between several notifiers at once - powershell command `create_and_copy_powershell_script` - aiviro-cli command `reader find` to validate if exported data is present in pdf-files - test coverage reports into GitLab-CI - negative results into cache - dynamic records removal from cache - option `FindMethod.GLOBAL` which finds all occurrences of searches not only the first one - methods for text and image addition to the PDFRobot - method for saving the PDF file, modified or not, was added to the PDFRobot ### Changed - imports of notifier components from `aiviro.modules.email.notifier` to `aiviro.modules.notifier` ### Fixed - typing of all functions to follow the newest versions of mypy - error some pdfs failing on decoding error - regex backtracking error ### Deprecated - creation of message directly through `EmailNotifier`, use instead `NotifierManager` - `recipients` argument in `send_report()` method in `EmailNotifier`, moved into object's constructor ## 3.7.1 Released on 01-12-2022 ### Added - info log into pdf-robot about the name of parsed pdf-file - `Secret` object for better handling of secret/sensitive texts - logging support for new pyfreerdp version ### Changed - all exceptions which are triggered from worker process now use `ChildProcessError` class ### Fixed - added timeout handling for starting worker process ## 3.7.0 Released on 29-11-2022 ### Added - argument `auto_move` into EmailExtractor, extract_* methods - `email` argument into EmailExtractor Conditions - `EmailDatetimeCondition` & `EmailSubjectCondition` new EmailExtractor conditions - supported python, os & cpu versions into documentation - new version of API calls to backend-vision server - api versioning, new endpoint /v1/detect - `aiviro-cli reader` commands - `stats` & `extract` - search-object `ClosestElement` to find closest object to its reference - simple scenario metrics calculation, cache usage, pdfs, api calls - checkout to master/develop into flow templates - logging of INFO logs into separate text-file ### Changed - pillow version to 9 so higher versions of python can use prebuilt wheels - clean-up internal code of Universal Parser ### Fixed - report template for microsoft Outlook ### Deprecated - old configuration of backend-vision server ## 3.6.0 Released on 24-10-2022 ### Added - `find_method` variable instead of `text_find_methods` - chaining capability for `key`, `find_method` & `boundary_type` - processing of Outlook itemAttachments, as if attachment is additional e-mail - `MultiPDFRobot`, can extract and hold data of several PDF files - variable `IS_RUNNING_IN_PREFECT` into aiviro package - `get_working_area` command ### Changed - some headless tests into static-robot, to speed them up - version of imap-tools dependency from 0.49.1 to 0.57.0 - file & inline email-attachments into file_attachments variable - name of method `do_text_extraction` to `parse` in PDF robot ### Fixed - visibility of Outlook OAuth2 folders ### Deprecated - variable `text_find_methods` - variable `working_area_method` ### Removed - argument `skip_chars` argument from PDF robot, moved into `parse` method ## 3.5.2 Released on 21-09-2022 ### Fixed - data-type of shared-folder path in RDP robot ## 3.5.1 Released on 19-09-2022 ### Added - `group` argument into mask_* commands to add/delete only specific group of masks ### Fixed - ci deploy job now working correctly - pdf extraction error which sometimes didn't split words correctly ## 3.5.0 Released on 15-09-2022 ### Added - methods for Outlook with OAuth2.0 & graf.microsoft endpoints into EmailClient - `setup_imap_basic_auth` & `setup_smtp_basic_auth` methods in EmailClient - unit testing for multiple versions of python (3.7, 3.8, 3.9, 3.10) ### Changed - updated versions of dependencies ### Fixed - pdf text duplication issue ### Deprecated - `username` & `password` arguments in EmailClient - `setup_imap` & `setup_smtp` methods in EmailClient ## 3.4.0 Released on 30-08-2022 ### Added - czech Invoice-Payment decoder for QR codes (https://qr-faktura.cz/) - `CheckCommandError` exception for check_* commands - documentation section for aiviro-exceptions - `implicit_wait` option into user_config options - alternatives for some standard fonts in pdf - support for pdfs which don't have characters in top level - `Copy-Item` command into PowerShell - `get_shared_folder_path` variable into PowerShell to get path on remote machine - `universal_parser` modul - `exception_to_raise` argument into get, see & wait_* commands - `create` command into aiviro-cli to initialize Aiviro project structure & add scenarios ### Changed - internal use of `os.path` to `pathlib.Path` - internal points distance calculation to use math module - name of FindService to SearchObjectService - names of Positioned* to Positional* - location of robots from one big script into separate ones - class `Robot`, split into `BaseRobot`, `DynamicRobot` & `StaticRobot` - internal use of `deque` for `OrderedDict` ### Fixed - pdf robot font parsing - pdf character merging not working sometimes properly ### Removed - `decoder` argument from `CodesExtractor` ## 3.3.1 Released on 25-07-2022 ### Changed - regex dot changed to new style ## 3.3.0 Released on 25-07-2022 ### Added - `aiviro-cli log analyze` command - option to edit Notification type in EmailNotifier - `notification_type` variable - argument `email_attachments` into EmailNotifier - `user_config` object to change similarity_threshold & set custom text-normalization - user Configuration section into documentation - `AutoSelectParsingStrategy` for ParserHandler - `ignorable_parser_objects` argument into ParserHandler - `parser` attribute into `ParserProcessingError` - `forward` method into email module - `encoding` argument into CSV & YAML configurations ### Changed - aiviro-debugger into aiviro-cli - functionality of *_by_boundary commands into `BoundaryArea` search-object ### Fixed - documentation typos in email-notifier section - texts & examples in documentation - loading of duplicated parser-classes ### Deprecated - command `add_mask_by_boundaries` - command `add_mask_by_margin` - command `set_working_area_by_boundaries` ### Removed - `parser_name` attribute from `ParserProcessingError` ## 3.2.4 Released on 20-07-2022 ### Added - missing keys into web-robot ### Fixed - bug when creating pdf robot state data ## 3.2.3 Released on 19-07-2022 ### Fixed - regex issue when using escaped special character ## 3.2.2 Released on 11-07-2022 ### Added - y-alignment of ocr-boxes when merged into common line - regex support for backref characters ### Changed - added `normalized_text` of `BoundBox` to noncomparable keys as it is lazy evaluated ### Fixed - ocr-boxes line-grouping into fix order - bound box mutable issue - regex normalization for charclasses containing space ## 3.2.1 Released on 01-07-2022 ### Added - `current_page` property into PDFRobot - `is_digital` property into PDFRobot ### Changed - opencv-python-headless dependency back to opencv-python ### Fixed - typo in unable-to-process message in EmailNotifier - ocr-box connection for bigger boxes - cache version incompatibility, between <3.1.5 & >=3.1.5 ## 3.2.0 Released on 29-06-2022 ### Added - pdf robot now uses masks correctly - commonly used Powershell commands for RDP-Robot - `subject` argument for sending email-notification - `last_block` property into EmailExtractor - option to pass `Msg` or `str` argument as message for EmailExtractor - `Item` object for creating notification messages - duration tag into `EmailNotifier` - functionality to load aiviro_config from env-variable in prefect flows - configuration loaders for YAML & CSV files - `ignore_exception` option to get element - emailExtractor for simplified way of email & attachment extraction - documentation for image-buffer - default values into doc for Aiviro configuration file - `skip_chars` argument into `create_pdf_robot` method - codes module for reading QR & Bar codes from image ### Changed - regex normalization to be more intelligent and prevent normalization of regexes with catastrophic backtracking - opencv-python dependency to opencv-python-headless ### Fixed - timezone in EmailNotifier & message typo - less verbose log messages when creating pdf robot - duplicated OCR boxes in metadata - box sorting for ocr-line-grouping - bug with memory not releasing before application exit - combination of `paste` & `blocking` argument in transfer_files_to_guests_clipboard cmd ### Removed - sorting of email notifications, make it optional - `force` option for robot-streaming ## 3.1.5 Released on 09-06-2022 ### Added - check when file exists when using RDP transfer to host ### Changed - pip project summary, email, licence ### Fixed - reference box filtering in positional elements - wrong argument call to `pyfreerdp` when using clipboard - ocr filtering by Icon elements ## 3.1.4 Released on 20-05-2022 ### Fixed - error handling of internal errors when parsing pdf ## 3.1.3 Released on 18-05-2022 ### Fixed - bug when using cc field in `send_mail` ## 3.1.2 Released on 17-05-2022 ### Fixed - bug when regex match didn't appear in unicode texts - robot now correctly releases shared memory - handling of email attachments with no content disposition - email sending to CC and BCC now works correctly ## 3.1.1 Released on 09-05-2022 ### Fixed - pdf text extraction now correctly uses clipping boxes ## 3.1.0 Released on 04-05-2022 ### Added - email-notification object for creating reports - ability to use non-default port when using RDPRobot - context-manager into `clear_screen_masks` command to work with `with` - sleep-time argument into rdp-robot `start-process` command - interval parameters to debugger - `or_index` variable into bound-box for result of `Or` search-object - `BaseParser` and `ParserHandler` as standardized way to implement document data extraction - image logs for `key_*` commands ### Changed - debugger to use more processor cores to speedup logs generation ### Fixed - rdp-robot `start_process` command issues - error when parsing log names - email sending from alias or shared mailbox - email query when used without parameters - email message operations when the message is not in the same path - too-many-elements exception in `wait-for` command ## 3.0.1 Released on 14-04-2022 ### Fixed - unknown method error in `wait_for_clipboard_file_transfer` command ## 3.0.0 Released on 09-04-2022 ### Added - missing RDPRobot clipboard functions. - several new SearchObject exceptions - ability to change name of the folder which is shared with rdp machine - text split by capital letters and special characters as ":", "." - `PDFRobot` which is used to read and parse PDF files. ### Changed - calculation of area intersection between working-area and detected boxes - email connection handling - core structure for merging core & toolbox together - main logger from `aivirocore` into `aiviro` - location of toolbox modules into aiviro package ### Fixed - regex correctly searching after normalization. - detection of a scene stability transition - element-index error in line-grouping service - documentation typos - documentation after aiviro + toolbox merge - waiting for rdp file transfer not working correctly ### Removed - all deprecated funcionality of 2.x.x aiviro-core versions - unimportant warning messages from wait_* commands ## 2.6.4 Released on 23-03-2022 ### Added - command `disable_cross_validation` - gif generation from image buffer - `ignore_timeout_exception argument` for `wait-until-disappear` command - bitwise operators `&` (and), `|` (or) for search-objects - command `close_tab` for WebRobot - new TableAnchor options, that calculates distance between objects based on both axis - more advanced cache into recognition-service, reducing time to find elements ### Changed - image hash in cache-service from percentual to sha1 - cross-validation is skipped for `Area` & `BoundBox` elements - prefect version dependency to 1.0.0 from 0.15.6 ### Fixed - `onTheRight/Left` element search, reference object is removed from the find-results - debug-log for `CustomBox` search-object - handling of connection errors to vision server. - some typos in documentation - typo in `text_to_type` & `check_are_in_row` commands - cross-validation exception in `wait-for` command - error logs into prefect - merge of `Input` element with OCR text - behaviour of DISTANCE option in positional search-objects ## 2.6.3 Released on 14-12-2021 ### Added - option to run start_process as admin when using RDP robot ### Fixed - issue when calculating disjunction of ocr and icon box, could lead to bounding box with negative width ## 2.6.2 Released on 08-11-2021 ### Added - `print_port` option into configuration file for video-stream - argument `use_full_screen` into working-area checkpoint commands - rolling logs that can be specified by maximum disk size, maximum number or both - `set_working_area_by_grid` command, which can be used for tables ### Changed - error when image is not set in `StaticRobot` ### Fixed - `get-by-scroll` command with timeout > 0 - `set-working-area-by-checkpoint` when checkpoint is created with set working-area - incorrect mask generation of `add_mask_by_display` when all sides are set to True and include_object set to False ### Removed - restriction of saving images locally from buffer in docker environment - unused tests & test-data from repository ## 2.6.1 Released on 11-10-2021 ### Added - aiviro-core version into robot's printout info - `limit-working-area` command - exception section into documentation - extra requirement Prefect into setup.py ### Changed - `wait-*` commands to work as get command when timeout is 0 - command proxy now uses cached property ### Fixed - `get_by_scroll` sometimes didn't register scroll when application registered scroll slowly - required version of pyfreerdp package - changelog text & doc-strings ### Removed - unused methods from robot ## 2.6.0 Released on 22-09-2021 ### Added - timezone option into config-file for aiviro-logs - `create_static_robot` which can be used when working with images without the need to create another type of robot - option to compress Aiviro-Logs - `set_working_area_by_boundaries` now supports multiple rules of bounding box creation - metadata-logging for Aiviro image-logs - option to generate only last-N-log-images - filtering of too big OCR boxes - `get_by_scroll` command which can be used to scroll until the all elements are found - support for new version of `pyfreerdp` (version 3.0.0) - new arguments for `create_rdp_robot` which allow shared folder - integration tests for RDP robot - documentation for aiviro-config file - automatic import sorting of repo - exception raise in set-working-area-by-checkpoint for images with different shape - automatic generation of `CHANGELOG.md` - collection of all release changes into one file `CHANGELOG.md` ### Changed - filtering of OCR boxes using Icon elements - documentation examples to use interactive python correctly - versions of required dependency packages - `start_process` has now a parameter to check only in lower left corner of the screen for dialog windows. (Most likely place for the run window) - `start_process` waits for the dialog to disapear to continue execution ### Fixed - text splitting for special characters in sentence - generation of documentation changelog - `type_text` argument call error - type-text command when input element is not found ### Deprecated - parameters `upper_boundary` and `lower_boundary` of `set_working_area_by_boundaries` will are replaced with `first_boundary` and `second_boundary` ### Removed - error logs in cross-validation for wait-until-disappear command ## 2.5.4 Released on 18-08-2021 ### Changed - doc-strings & documentation references ### Fixed - working-area for get with static-image - log of after-image in type-text command ### Removed - `ReferenceObjectNotFound` exception ## 2.5.3 Released on 28-07-2021 ### Added - `AND` search-object ### Changed - version of pyfreerdp for extra-dependency ### Fixed - too-nested-object exception ## 2.5.2 Released on 21-07-2021 ### Added - `cwd` argument for prefect-utils method `run_shell_command` - doc-string for EXCLUSIVE find-text-method option - unit-tests for devices/ - static runner manager & get-elements command from image ### Changed - aiviro setup options with extra python packages - reformat source-code with Black ### Fixed - image resources for documentation - table-anchor, NO_THRESHOLD option for Above/Below positional elements ### Removed - upload file-size restriction ## 2.5.1 Released on 15-07-2021 ### Fixed - regex normalization - missing keyboard for RDP-robot ## 2.5.0 Released on 12-07-2021 ### Added - filter of reference object in positional search-objects - markdown reporting into Prefect artifact - command to get streaming url - `EXCLUSIVE` text-find-method option - command to switch between robots as video-streaming source - `RegexText` search-object - option to create a robot from env-variable - support for CustomSearchObject & CustomBox - support for webdriver capability setting ### Changed - constants value names to a shorter version (deprecated) ### Fixed - text merging into lines - exact word search - reference-object & element-index exception for wait_* commands - checkpoint working-area command to work with current working-area - `Above/Below` anchor distance thresholds ### Removed - deprecated functionality for 2.5.0 version ## 2.4.6 Released on 23-06-2021 ### Fixed - merging of different sized text ## 2.4.5 Released on 01-06-2021 ### Fixed - correct termination of Aiviro-script in Prefect - empty regex_match is not stored in BoundBox anymore - positional elements overlaping - processing of image-logs & add additional evaluation for wait_* command ## 2.4.4 Released on 19-05-2021 ### Changed - streaming settings ## 2.4.3 Released on 13-05-2021 ### Added - example code into documentation ### Fixed - prefect logging ## 2.4.2 Released on 28-04-2021 ### Added - debug messages for cross-validation service - sensitive-data argument to clear-and-type command - `SearchObjectError` exception everywhere, when search-object is not found - prefect logging safeguard - non-case-sensitive option for aiviro.text_find_methods ### Changed - updated prefect API for version 0.14.16 ### Fixed - clear-and-type command causing double-click - image-logging for INFO debug level & INFO level set as default - `Icon` object text-reference when texts are too close to each other ## 2.4.1 Released on 07-04-2021 ### Fixed - wait-for command for positional element ## 2.4.0 Released on 02-04-2021 ### Added - text content into output BoundBox - aiviro custom exceptions - argument for env variables for prefect-utils, run-aiviro-script method - move-away command, mouse moves over empty position at screen - artifacts integration with Prefect - asynchronous logging for stdout/stderr for Prefect Tasks - wait-until-disappear command - regex result into output BoundBox ### Changed - optimize Wait-For command ### Fixed - robot methods documentation - sub-image search service - configuration constants - cross-validation service - working-area checkpoint command for gray background ## 2.3.1 Released on 12-03-2021 ### Added - warning for image-buffer, transfer-file & forbid image-logging and streaming in docker - socket timeout for robot streaming ### Changed - return state for NotifyTask ### Fixed - context manager for working-area ## 2.3.0 Released on 09-03-2021 ### Added - image upload logs to dashboard - api-key check for Aiviro configuration - argument for addional files into image-upload logs - notification task for Prefect - tips & trciks section into Documentation - video streaming static link ### Changed - stability checking limited by working-area - method of screen capture for cross-validation service ### Fixed - small bugs & sleep-check ## 2.2.0 Released on 12-02-2021 ### Added - timeout for recieving a new image - image logging buffer - creation of working-area by checkpoint ### Changed - logging of BoundBox object into human readable form ### Fixed - sleep-check for type-text command - cache getting duplicated results