Releases: vertopal/vertopal-cli
Vertopal CLI v2.2.0
✨ Added
- New API exceptions (
TooManyRequestsError,FreeAppLimitedError,DisabledForFreeAppError,WrongFormatStructureError,InvalidFormatError). - Public
Configclass with support for in-memory runtime overrides (update,clear_overrides,get). - Masking of sensitive values (e.g., API tokens) in string representations.
- Exposed
Configat the top-level package for external usage.
🐛 Fixed
- Improved
_ChunkedFileWrapperto rewind file streams before upload, preventingEMPTY_FILEerrors and truncated uploads. Added__len__,__iter__, and__next__methods for better streaming client compatibility and chunk iteration. - Improved JSON response detection in
vertopal.api.interface._Interface.send_request
to correctly handleContent-Typeheaders with parameters (e.g.application/json; charset=utf-8).
Full Changelog: v2.1.0...v2.2.0
Vertopal CLI v2.1.0
✨ Added
- Support for configurable upload and download chunk sizes:
- New settings:
stream_upload_chunk_sizeandstream_download_chunk_size(fall back tostream_chunk_sizeif unset). - New
_ChunkedFileWrapperinternal utility to enforce fixed chunk sizes during streaming. - New
_Interface.upload_chunk_sizeand_Interface.download_chunk_sizeproperties to resolve effective chunk sizes. API.upload_filenow accepts an optionalchunk_sizeparameter, defaulting to configuration values.
- New settings:
🐛 Fixed
- Fixed
_ChunkedFileWrapper.read(-1)to return the full file instead of a single chunk, preventing truncated uploads for binary files. - Corrected
send_requestJSON validation logic to check theContent-Typeheader instead of endpoint path, preventing errors when handling binary responses (e.g., file downloads). - Explicitly use
.valueforInterfaceStrategyModeandInterfaceSublistModeto ensure consistent string output across Python versions (avoiding f-string differences introduced after Python 3.10).
🛠 Changed
- Refactored type hints to use built-in generics (
list,dict, andtuple) instead oftyping.List,typing.Dict, andtyping.Tuple. - Updated README installer instructions to use a unified endpoint for macOS and Linux (
https://run.vertopal.com/cli/unix).
Full Changelog: v2.0.3...v2.1.0
Vertopal CLI v2.0.3
🐛 Fixed
- Updated GitHub Actions build matrix to replace
ubuntu-20.04withubuntu-22.04in preparation for the deprecation and removal of theubuntu-20.04runner image on GitHub Actions (April 1, 2025). This ensures continued availability of Linux builds and avoids scheduled brownout outages.
Full Changelog: v2.0.2...v2.0.3
Vertopal CLI v2.0.2
Note
This version was published to PyPI but no binary build using GitHub Actions was created.
2.0.3 is the latest patch release and should be preferred.
🐛 Fixed
- Removed
slots=Truefrom@dataclassdeclarations to restore compatibility with Python 3.9.
Full Changelog: v2.0.1...v2.0.2
Vertopal CLI v2.0.1
Note
This version was published to PyPI but no binary build using GitHub Actions was created.
2.0.3 is the latest patch release and should be preferred.
🐛 Fixed
- Updated GitHub Actions workflow to replace deprecated
actions/upload-artifact@v3andactions/download-artifact@v3with v4 equivalents. - Adjusted artifact download step to use
patternandmerge-multiplefor collecting OS-specific build artifacts in a single directory during release.
Full Changelog: v2.0.0...v2.0.1
Vertopal CLI v2.0.0
Note
This version was published to PyPI but no binary build using GitHub Actions was created.
2.0.3 is the latest patch release and should be preferred.
📦 Migration Guide (from 1.x to 2.0.0)
If you are upgrading from Vertopal CLI 1.x, please review and apply the following changes to ensure a smooth transition:
-
Reconfigure private credentials
-
The configuration key for the application ID has changed from
api.appidtoapi.app. -
You must update your stored credentials; otherwise, the program will raise an
InvalidCredentialErrorexception. -
New syntax (v2.0.0+):
vertopal config api.app "your-app-id" api.token "your-security-token"
-
Old syntax (pre‑2.0.0):
vertopal config --app "your-app-id" --token "your-security-token"
-
-
Note the new public default credential
- Vertopal CLI now ships with a built‑in, non‑authenticated credential (
app: free,token: FREE-TOKEN) so you can start using it immediately after installation. - This credential is free but subject to daily rate limits. For production workloads, configure your private credentials as shown above.
- Vertopal CLI now ships with a built‑in, non‑authenticated credential (
For full details, see the Breaking Changes and Added sections below.
🚨 Removed (Breaking Changes)
-
Dropped support for Python 3.7 and 3.8 — the package now requires Python 3.9 or later (see
pyproject.toml). -
Removed support for legacy import/layout patterns; the project now uses the
src/package layout as the canonical layout. -
Removed several legacy public symbols previously exported from the package root to provide a smaller, stable public surface (see
vertopal/__init__.py). -
Removed the top-level re-export of internal API classes. Consumers should import low-level clients directly from their modules (for example
vertopal.api.v1.API). -
Removed several command-line flags from the
vertopalcommand:--app,--token,--overwrite, and--silent. -
Configuration key changed — the application ID is now stored under the INI-style key
api.appin the user configuration file (previouslyapi.appid).
Users upgrading from earlier versions must reconfigure their private credentials to continue using them.New syntax (v2.0.0+):
vertopal config api.app "your-app-id" api.token "your-security-token"
Old syntax (pre‑2.0.0):
vertopal config --app "your-app-id" --token "your-security-token"
The old flags are no longer supported. See also the new public default credential in the Added section.
✨ Added
- Improvements to the
vertopalCLI (seevertopal convert --help):- Bulk conversion support: accept files, directories, globs and brace/range patterns (e.g.
{a,b},{1..5},**/*). - Read from
stdinby using-as an input source. - Write to
stdoutby passing--output -. - Accept a file list as input and override output filename or output directory per invocation.
- Recursive directory traversal and exclude-by-pattern support.
- Filter inputs by modification date using an ISO 8601
--modified-sincefilter.
- Bulk conversion support: accept files, directories, globs and brace/range patterns (e.g.
- Added credential management to centralize application ID and security token handling (see
vertopal/api/credential.py). - Introduced a new
clisubpackage and refactored command managers for clearer separation of concerns (seevertopal/cli). - Reworked the CLI entry point and argument parser for clearer help, subcommands, and argument validation (see
vertopal/vertopal.py). - Added
ReadableandWritableI/O protocols and three adapter modules: file, in-memory, and stdio for consistent I/O abstractions (seevertopal/io/protocols.py, andvertopal/io/__init__.py). - Added structured API response wrappers and richer helpers to the v1 client to simplify caller code (vertopal/api/v1.py).
- Added a centralized
settingsmodule,enums,types, andPrismterminal styling helper for consistency across the codebase (seevertopal/settings.py,vertopal/enums.py,vertopal/types.py, andvertopal.utils.prism). - Added a public default credential to simplify first-run experience: the CLI ships with a non-authenticated, limited credential (app:
free, token:FREE-TOKEN) so users can try the service without creating an account. This credential is intended for personal testing and evaluation and is subject to daily rate limits; production workloads should configure a private credential in the user config.
🛠 Changed
- Moved terminal and CLI internals into the new
clisubpackage; command registration and adapter responsibilities were reorganized into dedicated manager modules (seevertopal/cli). - Converted API client methods to return lightweight, structured response wrappers rather than raw dicts/tuples to improve ergonomics and error handling (see
vertopal/api/v1.py, andvertopal/utils/data_wrappers.py). - Stabilized packaging and metadata to the
src/layout and modern build metadata (seepyproject.toml, andsetup.py). - Moved API exception types into the top-level
vertopal.exceptionsmodule and simplified exception usage across modules. - Relocated the build helper into
tools/build.pyfor clearer separation of tooling code. - Reworked the configuration module to use a singleton
Configand safer load/write semantics (seevertopal/utils/config.py). - Redesigned
vertopal.api.v1.APIto be an instantiable client object rather than a module-level static; this enables per-instance configuration and better testability. - Updated the
vertopal configsubcommand: the command's interface and behavior for modifying the user configuration file has been redesigned. It now exposes clearer interactive and non-interactive options, safer write semantics, and explicit flags for common keys (seevertopal config --help).
🐛 Fixed
- Fixed multiple resource leaks and inconsistent timeout usages in HTTP calls; timeouts are now applied uniformly for requests, uploads, and downloads.
Full Changelog: v1.1.0...v2.0.0
Vertopal CLI v1.1.0
🚀 Features
- Add optional
--beautify(flag) argument to thevertopal apicommand to pretty-print to the standard output. - Add 3 new
vertopal.api.v1.APImethods:format_get(),convert_graph(), andconvert_formats().
🐛 Bug Fixes
- Use minimum version for package dependencies.
Full Changelog: v1.0.6...v1.1.0
Vertopal CLI v1.0.6
🐛 Bug Fixes
- Build Windows binary using PyInstaller 5.7.0 and a compiled bootloader to prevent false-positive antivirus alerts.
Full Changelog: v1.0.5...v1.0.6
Vertopal CLI v1.0.5
🚀 Features
- Introducing
apicommand for sending authenticated HTTP requests to the Vertopal API.
To view the fullapicommand help, executevertopal api --helpin the terminal.
Full Changelog: v1.0.4...v1.0.5
Vertopal CLI v1.0.4
🚀 Features
- Introducing
Converterclass for easier file convert implementation in your projects. - Added custom exceptions to give developers better control on the conversion errors.
📈 Improvements
- Use different product names in User-Agent to distinguish between the requests of CLI and Python package.
🐛 Bug Fixes
- Increase the connection timeout for the upload and the download tasks for upload/downloading the bigger-sized files.
Full Changelog: v1.0.3...v1.0.4