TBD
- Added support for display name to command decorator
- Updated Wait Timeout Exception expected HTTP code from 408 to 504
- Dropping Official Python 2.7 Support
11/25/24
- Updated plugin class to accept version contraints for required dependencies. Contraints follow python packaging version specifiers.
- Added new annotation/configuration support for shutdown functions. These functions will be executed at the start of the shutdown process.
- Added new annotation/configuration support for startup functions. These functions will be executed after Plugin().run() has completed startup processes
10/9/24
- Plugin will periodically monitor if required dependencies are running to update status accordingly
- Apply MD5 Check Sum of chunked files to ensure files are loaded into memory properly
- Updated Plugin max_concurrent to support -1 to utilize the default formula that concurrent.futures.ThreadPoolExecutor supports min(32, os.cpu_count() + 4)
- Updated SystemClient to utilize the local Garden name for default Namespace if none can be determined
- Updated default Garden version to UNKNOWN
- Updated get_current_request_read_only to support sub threads calling where current_request is not populated
- Refactored Publishclient for Registering and Unregistering commands input values
9/12/24
- Expanded PublishClient to support Registering and Unregistering commands to Topics after a plugin has been initialized
- Fixed bug where threading a SystemClient within a plugin lost current_request context and failed to map requester, SystemClient will still drop the current_request context,but the requester field can be provided via _requester
- Expanded Garden model to support tracking the version of Beer Garden running
8/21/24
- Updated Plugin class to accept requires and requires_timeout attributes to require plugin to wait for dependencies before starting.
8/13/24
- Expanded Topics Rest API to support Topic Name as a key
- Expanded Topic/Subscriber models to include counters
- Formalized Status Info model and added helper features to track the history of the status changes.
- Added support models for tracking primary replication
- New Models for User, UserToken, Role, and AliasUserMap
- Must upgrade to a minimum version of Beer Garden 3.27.0 to support new authentication models. If authentication is not enabled, upgrade is not required.
- Removed 2.0 Legacy support for Principle and LegacyRole models
- Fixed bug in SystemClient to properly assign requester field from parent request
7/12/24
- Fixed bug where parameter type mapping did not match type hinting
- Exposed a read only feature to provide the current request that is being processed from brewtils import get_current_request_read_only
- Expand Job Export to include Job id
7/10/24
- Update Parameter decorator to map parameter type from literal to string value if possible
- Added Subscriber Types to Subscriber model
- Added Prefix Topics to System model
- Support adding Prefix Topics for the Generated Subscribers. It is supported through the @client or SystemClient inputs or beer.conf
6/6/20
- Fixed decorators for Command and Parameter to support type and output_type capitalization variations
5/24/2024
- Fixed SystemClient to revert to actual System Version when using latest when validation error occurs when no change in calculated latest. Allowing support for Beer Garden >= 3.26
- Added support for SystemClient commands to override command type with _command_type
5/16/2024
- Added support for autobrew any kwargs
- Fixed cross-server url prefix comparison and handled case where there is no current request
- Added API support for Latest System, SystemClient will use Version latest instead of resolved version. Allowing Beer Garden to resolve the latest version.
- Must upgrade to a minimum version of Beer Garden 3.26.0 to support new APIs
5/3/2024
- Add support for cross-server parent/child requests
- Added Python 3.9 ThreadPoolExecutor shutdown process to only finish cached requests that are IN_PROGRESS
- Fixed Self-Referencing bug where spawned requests did not assign command_type
- Fixed Typehinting parsing for datetime.datetime types
- Fixed allow_any_kwargs for commands that are called via SystemClient.
- Fixed Self Referencing System Client Parent/Child request mapping
4/5/2024
- Added Topic and Subscriber models and related access methods to easy client
3/11/2024
- Fixed bug client passed into Plugin would not initialize the commands for Remote Plugins
3/8/2024
- Fixed bug where Self Referencing SystemClients did not support false as default value when not provided
3/1/2024
- Fixed bug where Self Referencing SystemClients did not inspect the command properly for default parameters
2/28/2024
- Self Referencing SystemClient now supports default values provided through the Parameter annotation
2/13/2024
- Expanding Garden model to include children gardens
- Added Source/Target Garden labels on Request model
- Added Metadata to Garden model
- Fixed self reference bug that was returning back output instead of Request object.
- Fixed self reference bug, when SystemClient calls itself but doesn't have a current request. This allows for support to run SystemClient in a sub-thread to the plugin.
- Expand Job model to include Skipped and Canceled counters
12/27/2023
- Add support to change the Exchange Type for RabbitMQ. Default is 'topic', but options like 'fanout' can now be supported
- Better handling of Pika errors
- Updated how AutoBrewtils maps functions, and will skip auto marking commands with annotations
- When SystemClient is self referencing to the Plugin, child requests will be generated locally, then uploaded to Beer-Garden once the request is completed.
- Must upgrade to a minimum version of Beer Garden 3.23.0 to support new APIs
12/13/2023
- Added new KWARG input to @command for tag/tags. This can be utilized for filtering commands.
- Adding default topic for PublishClient to Plugins {Namespace}.{System}.{Version}.{Instance}
- Removed Python 12 support until we upgrade Marshmallow dependency to 3.15 or greater
11/16/2023
- Added new paramter to Commands to signal if non defined kwargs can be passed
- Added Event Type REQUEST_DELETED
11/9/2023
- Fixed SystemClient Latest lookup where "0.0.dev" is parsed to "0.0.0.dev0" but didn't mantain the original version to map back to latest system
11/2/2023
- Fixed an issue where topics could repeat when using topic in @subscribe
11/1/2023
- Expanded Auto Generation to support Literal Type Hinting, if python version >= 3.8
- Fixed self reference bug in SystemClient
- Add PublishClient for broadcasting requests to Topics
- Add @subscribe annotation for commands to listen to topics
10/20/2023
- Checks connection status when Plugin is initialized
- Added SystemClient(system_namespaces=[]) feature that round robins requests across multiple system_namespaces
- Expanded Auto Generation to support Doc String parameter extraction
- Plugins will break if Type Hinting and Parameter Type assignment do not match
- Expanded Auto Generated parameter Typing from Type Hinting or Doc String to be:
- str -> String
- int -> Integer
- float -> Float
- bool -> Boolean
- object -> Dictionary
- dict -> Dictionary
- DateTime -> DateTime
- bytes -> Bytes
10/13/2023 - Add Auto Decorator for class objects
10/11/2023 - Add new command type TEMP
4/14/2023
- Removed version pinning on the packaging and wrapt dependencies
- Support for python 3.11
8/31/2022
- Removed internal references to beer garden v2 naming conventions
6/2/2022
- The ability to customize rendering in the Beer Garden UI by specifying the schema, form, and template parameters in the @command decorator is now deprecated. Future releases of Beer Garden will no longer support this type of customization, so these options should no longer be used in brewtils.
- Removed pyjwt dependency
- Added various internal event types
4/12/2022
NOTE: This release fixes an issue where client certificates would not be sent to rabbitmq, even if a Plugin was configured to do so. Connecting to rabbitmq with certificates currently requires that the provided certificate be a key and certificate bundle. Please be aware that in certain configurations where the certificate is already set and is not a bundle, your connection to rabbitmq may fail under this release. To fix this, switch your certificate to be a bundle that also includes the key.
- Plugins will now properly use client certificates when connecting to rabbitmq if provided.
- Fixed an issue that was preventing brewtils from working properly in python 3.10.
3/21/2022
- Added new internal event types:
USER_UPDATED
andUSERS_IMPORTED
.
2/9/2022
get_gardens
(list of all Gardens) andupdate_garden
(apply a new definition to an existing Garden) added to easy client
- Permission field added to
UserSchema
.
1/4/2022
Bytes
andBase64
parameter types can now be defined as optional.RestClient
no longer requiresusername
andpassword
when using certificates.
12/8/21
- EasyClient
execute_job
method now supports resetting the run interval for jobs with an interval trigger.
11/18/21
- EasyClient now has an
execute_job
method for doing ad-hoc executions of a scheduled job. - Request now has a
status_updated_at
field representing when the last status changed occured.
- Misc additions related to future support of authentication / authorization in Beer Garden.
10/15/21
- Pinned troublesome dependency
wrapt
to version that's known to not be a problem
- Misc additions related to future support of authentication / authorization in Beer Garden.
9/22/21
- Fixed issues related to interacting with beer-garden urls containing unicode characters (Issue #339 / PR #344)
- Added
export_jobs
andimport_jobs
to EasyClient (Issue #353 / PR #337) - Added
create_garden
andremove_garden
to EasyClient (Issue #348 / PR #350)
- Added schemas for use in future authorization related features (Issue #345 / PR #347)
8/18/21
- Can now specify proxy parameters when creating RestClients
6/24/21
- Changed duplicate event enum value (Issue #932 / PR #330)
- Better handling of non-json error responses (Issue #1033 / PR #324)
- No longer ignoring
max_attempts
,max_timeout
, andstarting_timeout
values (Issue #1028 / PR #323) - A plugin Client instance can now be reused (Issue #1014 / PR #321)
- Charset in content-type header no longer breaks URL-based display resource loading (Issue #1010 / PR #319)
- URL-based template resolution respects connection configuration (Issue #1009 / PR #318)
- System attributes (like description) can now be cleared (Issue #1002 / PR #317)
- Jobs now have a timeout field (Issue #1046 / PR #329)
- Added
bg_system
andbg_default_instance
properties to SystemClient (Issue #279 / PR #273) - Forwarding REST calls now support
blocking
andtimeout
parameters (Issue #895 / PR #325) - Added support for lambdas as a Choices source (Issue #1004 / PR #322)
- Bytes-type parameters are now supported (Issue #991 / PR #316)
- Systems can now have UI templates (Issue #997 / PR #315)
- Commands now have a metadata field (Issue #358 / PR #314)
- Removed support for pika versions below 1.0 (Issue #651 / PR #328)
- SystemClient now has a
__str__
method (Issue #76 / PR #327) - Dropped official support for Python 3.5 (Issue #1043 / PR #326)
- Added INVALID Request status (PR #325)
4/23/21
- Better error messages for incorrect parameter definitions (Issue #986 / PR #309)
- Fixed a case where reusing a parameter model could break (Issue #987 / PR #310)
- Support for scheduled job modification (Issue #294 / PR #308)
4/16/21
- Nullable multi parameters with a model no longer set a problematic default (Issue #769, #983 / PR #305)
- End date is now set correctly for cron-type jobs (Issue #963 / PR #306)
- Order of parameters in the UI now matches the order of decorators (Issue #267, #981 / PR #304)
- More type hints for SystemClient and EasyClient methods (Issue #957 / PR #303)
4/1/21
- SystemClient with no parameters will default to the current plugin (Issue #780 / PR #293)
- Added methods to RestClient and EasyClient for using the /api/v1/forward API (PR #301)
- New and improved decorators module (Issue #777 / PR #290)
- The @system decorator has been renamed to @client (Issue #927 / PR #297)
- @parameters (plural, with an "s") is now deprecated (Issue #924, PR #299)
- Easier to specify logger name when creating a StoppableThread (Issue #874 / PR #291)
2/5/21
- SystemClient parameter resolution no longer always fails if no system is assigned (Issue #859 / PR #289)
- Added positional arguments back-compatibility for EasyClient and SystemClient creation (Issue #836 / PR #286)
- Fixed regression relating to old decorator deprecations (Issue #835 / PR #285)
- Added 'hidden' field to Request ile model (Issue #414 / PR #288)
- Added 'job' and 'request' fields to File model (Issue #833 / PR #284)
Date: 1/11/21
- SystemClient no longer disallows creating a Request for a System without a namespace (Issue #827 / PR #281)
- Logs are now written correctly when a Plugin encounters an uncaught exception after initialization (Issue #787 / PR #276)
- Plugin registration will now behave as expected when the list of plugin Commands is empty (Issue #806 / PR #277)
- Added a Rescan method to the EasyClient (Issue #815 / PR #278)
- The decorators
command_registrar
,register
, andplugin_param
are officially deprecated (Issue #825 / PR #280)
Date: 12/15/20
- Added
client_key
parameter to support separate key and cert files (beer-garden#785) - Better
SystemClient
error message if a positional parameter is used (beer-garden#775) - Plugins will now work when connected to a v2 Beer Garden (beer-garden#751)
- Support for file-type parameters (#368)
- Using nested models when defining Parameters now works correctly (#354)
- Plugins now register a SIGTERM handler for shutdown consistency (beer-garden/#745)
Date: 11/10/20
Note: This is a major upgrade with several breaking changes. Please see the Upgrade Guide for all changes.
- Plugins now automatically load configuration from CLI and environment variables
- Logging configuration is loaded automatically when Plugins are created
- No longer need to pass connection information to System/Easy/Rest Clients
- Parameter choices definition can be a non-list iterable (beer-garden/#512)
- It's now easier to specify an alternate parent when making a request (beer-garden/#336)
- SchemaParser can now directly serialize dicts and Boxes (#239)
- EasyClient.get_instance_status is deprecated but now actually returns the instance status
- Plugins are now multi-threaded by default (#47)
- Better error messages when using SystemClient with raise_on_error=True (beer-garden/#689)
- Various deprecated names have been removed
- Can now defer setting a Plugin client
- EasyClient.get_version returns actual version information instead of Response object
- Using a pika version <1 is deprecated
Date: 10/13/20
- Fixing command invocation error when request has no parameters (beer-garden/#351)
Date: 1/30/20
- Better error handling if a request exceeds 16MB size limit (beer-garden/#308)
Date: 1/13/20
- Requests republished to rabbit are now persistent (beer-garden/#397)
Date: 1/10/20
- Reverting a log message level that was incorrectly set to INFO
Date: 12/9/19
- Plugins always attempt to notify Beer-garden when terminating (beer-garden/#376)
Date: 11/12/19
- Plugins can now survive a rabbitmq broker restart (beer-garden/#353, beer-garden/#359)
Date: 10/30/19
- Fixed issue with callbacks in RequestConsumer when using Pika v1 (beer-garden/#328)
Date: 9/5/19
- Better control over how specific error types are logged (beer-garden/#285)
- Decorators now work with non-JSON resources loaded from a URL (beer-garden/#310)
Date: 6/27/19
- Can now specify a name and version in the
system
decorator (beer-garden/#290)
- SystemClient now correctly handles versions with suffixes (beer-garden/#283)
- Added compatability with Pika v1 (#130)
Date: 4/19/19
- Using new pika heartbeat instead of heartbeat_interval (#118)
- @parameters now accepts any iterable, not just lists (beer-garden/#237)
- Support for new header-style authentication token (#122)
- Added EasyClient.get_instance, deprecated get_instance_status (beer-garden/#231)
- Parameters with is_kwarg on command without **kwargs will raise (beer-garden/#216)
Date: 2/14/19
- Fixed a warning occuring with newer versions of Marshmallow (#111)
- Adding EasyClient to __all__ (beer-garden/#233)
Date: 1/7/19
- RabbitMQ connections now deal with blocked connections (beer-garden/#203)
- Plugin will use url_prefix kwarg if bg_url_prefix not given (beer-garden/#186)
- Always respecting parameter choices definition changes (beer-garden/#58)
Date: 11/16/18
- Added instance retrieve and delete methods to clients (#91)
- Logging API now respects all connection parameters (#94)
Date: 10/7/18
- Ability to specify a timeout for Beergarden communication (beer-garden/#87)
parameters
decorator for cleaner command definitions (beer-garden/#82)
- Fixed error when republishing a message to RabbitMQ (beer-garden/#88)
Date: 09/11/18
- Changed Plugin warning type so it won't be displayed by default
Date: 09/5/18
- Added job scheduling capability (beer-garden/#10)
- Added support for authentication / users (beer-garden/#35)
- Plugins will load log level from the environment (bartender/#4)
- RestClient now exposes
base_url
(#58) - SystemClient can wait for a request to complete instead of polling (#54)
- Allowing custom argument parser when loading configuration (#67)
- Support for TLS connections to RabbitMQ (#74)
- Warning for future change to plugin max_concurrent default value (#79)
- Added methods
get_config
to RestClient,can_connect
to EasyClient
- Renamed PluginBase to Plugin (old name is aliased)
Date: 07/11/18
- Current request can be accessed using
self._current_request
(beer-garden/#78)
- Updating import problem from lark-parser #61
- Pinning setup.py versions to prevent future breaks
Date: 06/06/18
- Added has_parent to request model
Date: 4/17/18
- Using simplejson package to fix JSON parsing issue in Python 3.4 & 3.5 (#48, #49)
Date: 4/5/18
- Python 3.4 is now supported (#43)
- Now using Yapconf for configuration parsing (#34)
- Parameter types can now be specified as native Python types (#29)
- Added flag to raise an exception if a request created with
SystemClient
completes with an 'ERROR' status (#28)
- All exceptions now inherit from
BrewtilsException
(#45) - Removed references to
Brewmaster
exception classes (#44) - Requests with JSON
command_type
are smarter about formatting exceptions (#27) - Decorators,
RemotePlugin
, andSystemClient
can now be imported directly from thebrewtils
package
Date: 3/20/18
- Fixed bug where request updating could retry forever (#39)
Date: 3/7/18
- Fixed issue with multi-instance remote plugins failing to initialize (#35)
Date: 2/22/18
- Added
description
keyword argument to@command
decorator
Date: 1/26/18
- Added methods for interacting with the Queue API to RestClient and EasyClient
- Clients and Plugins can now be configured to skip server certificate verification when making HTTPS requests
- Timestamps now have true millisecond precision on platforms that support it
- Added
form_input_type
to Parameter model - Plugins can now be stopped correctly by calling their
_stop
method - Added Event model
- Plugins now additionally look for
ca_cert
andclient_cert
inBG_CA_CERT
andBG_CLIENT_CERT
- Better data integrity by only allowing certain Request status transitions
Date: 1/11/18
- Nested requests that reference a different beer-garden no longer fail
Date: 10/23/17
- Command descriptions can now be changed without updating the System version
- Standardized Remote Plugin logging configuration
- Added domain-specific language for dynamic choices configuration
- Added
metadata
field to Instance model
- Removed some default values from model
__init__
functions - System descriptors (description, display name, icon name, metadata) now always updated during startup
- Requests with output type 'JSON' will now have JSON error messages
- Added license file
Date: 8/25/17
- Added
updated_at
field toRequest
model SystemClient
now allows specifying aclient_cert
RestClient
now reuses the same session for subsequent connectionsSystemClient
can now make non-blocking requestsRestClient
andEasyClient
now support PATCHing aSystem
multithreaded
argument toPluginBase
has been superseded bymax_concurrent
- These decorators are now deprecated
-
@command_registrar
, instead use@system
-@plugin_param
, instead use@parameter
-@register
, instead use@command
- These classes are now deprecated
-
BrewmasterSchemaParser
, instead useSchemaParser
-BrewmasterRestClient
, instead useRestClient
-BrewmasterEasyClient
, instead useEasyClient
-BrewmasterSystemClient
, instead useSystemClient
- Reworked message processing to remove the possibility of a failed request being stuck in
IN_PROGRESS
- Correctly handle custom form definitions with a top-level array
- Smarter reconnect logic when the RabbitMQ connection fails
- Removed dependency on
pyopenssl
so there's need to compile any Python extensions - Request processing now occurs inside of a
ThreadPoolExecutor
thread - Better serialization handling for epoch fields