All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
1.14.4 - 2024-05-11
- Cached configurations using
ImportIniConfig
. - Attribute access using the call directive (
call
). - An LRU cache
Stash
class. - A stash that filters
Failure
.
- Confirm the naming of the
KeyLimitStash
class's attributen_limit
tolimit
.
1.14.3 - 2024-04-14
- A
TRACE
log level inzensols.util.log
.
- Add configuration evaluation and shell output to CLI show config (
config
) action.
1.14.2 - 2024-02-27
- Short usage and help synopsis using the short help option (
-h
). - Application configuration aliases (
alias:
) as a solution to tricky configuration parser option interpolations. - An application to clear file caches given a list of application configuration aliases.
1.14.1 - 2024-01-04
- Fix
Failure
picking bugs. - Move
Failure
andAPIError
to their own (util.fail
) module.
1.14.0 - 2023-12-05
This release removes the deprecated CLI modules and is tested on Python 3.11.
UnitTester
, which runs unit test cases from the REPL for the rapid prototyping use case.- Support for Python 3.11.
- Old
actioncli
CLI moduleszensols.cli.{preaction,simple}
. - Support for Python 3.9.
1.13.3 - 2023-11-29
Failure
class is more flushed out.- Documentation, flake8 warnings, typehints.
1.13.2 - 2023-09-30
- Functionality to force usage of the default action by argument reprocessing.
- Default configuration searches UNIX style resource files for configuration
(i.e. package
zensols.util
would point to~/.zensols.util
). - Harness CLI uses better shell parsing to create applications and resources.
1.13.1 - 2023-08-25
- Multiprocessing strategy (
Multiprocessor
) split from owning stash (MultiProcessStash
).
1.13.0 - 2023-08-16
Moderate risk update release that changes tree structured application configuration.
- Key subset stash class.
- A no-operation
Stash
.
- Introduce a tree based
Configurable
for YAML and JSON type configurations. - Fix YAML bug for empty configuration files.
- CLI
stdout
context manager is more CLI friendly. Initial parameter is the same, but open arguments are now a list. - Fix multi-processing stash by adding a call to
MultiProcessStash.prime
. - Raise
ApplicationError
s fromApplicationFailure
s.
- A new tree-like
Configurable
that allows for nested dictionary access previously only available in theYamlConfig
. This is now available inDictionaryConfig
andJsonConfig
. - A new instance directive (
tree
) to create new instances from deep nested dictionary configuration. - A decorator to catch an exception type and re-throw as an
ApplicationError
as a command line application convenience. - Bug fix parsing empty YAML files.
1.12.6 - 2023-07-02
- Fix the CLI app returned first pass action showing up in action list.
1.12.5 - 2023-06-11
- Integer selection parsing and CLI interaction.
1.12.4 - 2023-06-09
- CLI bug fixes.
1.12.3 - 2023-06-07
- Jupyter notebook utility class
NotebookManager
. This class integrates with access Zensols applications via Jupyter. - Flexible module agnostic class resolution methods.
- More comprehensive parsing of Python source files in
ClassInspector
.
1.12.2 - 2023-04-05
- Override all optional positional metadata.
- Configuration operand
application
to create instances of the context from a an external application. - Create YAML from
Dictable
instances. - A
Dictable
flat nested dictionary structure suitable for writing to JSON or YAML. - A context manager that multiplexes between standard out or the file system.
- A byte formatting utility in
FileTextUtil
.
- Refactor to uncouple configuration factory operands (i.e.
instance
,object
) inImportConfigFactory
as separate classes. - Allow overriding of positional metadata for the CLI package.
- Fix Sphinx API generated documentation and human readable documentation.
1.12.1 - 2023-02-02
CliHarness
application get method.
1.12.0 - 2023-01-22
- A programmatic method to get the config factory and application context using
the CLI application invocation API from the
CliHarness
. This uses an "invisible" application that returns the configuration factory enabling the application access without "short cutting" the API to get instances. - An
instance:
parameter in application context configurations that allow new/deep instances. - A convenience utility class
DefaultDictable
that provides access to methods such aswrite
andasjson
without needing inheritance. - Command line help available on specified action only.
- Upgraded the
configparser
package from 5.2 to 5.3. - Fix bug with config factories throwing the wrong exception when using
type=import
in application configuration when using bad configuration files with-c
on the command line. - The
persisted
decorator andPersistedWork
skip file system checks when configured as in memory rather with file system paths. - The CLI
Cleaner
app now expands the user home directory when the syntax is provided withpathlib.Path.expanduser
. - Better command line help and usage formatting.
1.11.1 - 2022-09-30
A few functional Stash
changes, but mostly a bug release.
- More options for file system name normalization.
- Propagate clear method message in
FactoryStash
. - Skip clear for read only stashes from
FactoryStash
.
1.11.0 - 2022-08-06
- Add a read-only zip file based stash.
- File system and hashing utilities.
- State clearing in
PersistableWork
.
- Resource configuration (
conf_sec
for regular expressions). - Better error messages from
DirectoryStash
. - Robustly allow null YAML config values.
- The
time
context manager removed thelogger
keyword parameter.
1.10.1 - 2022-06-15
- Command line configuration metadata with configuration decorators bug fix.
1.10.0 - 2022-06-13
- Command line first pass applications and
--config
option added as resource libraries. - If/then/else logic during configuration creation with
ConditionalYamlConfig
. - Nest and invoke
--override
anywhere in the configuration importation list. - Inline
@dataclasses
in YAML files at the section level. - Scientific notation formatted configuration option values.
- Updated documentation to be more current, added newer API.
DirectoryCompositeStash
now robustly handle group sequences.- Better collapsing of long option and defaults usage help columns.
- Bug fixes and supporter for merging
CLI_META
for CLI applications.
- Support for Python 3.8 is removed.
1.9.0 - 2022-05-14
- Support for Python 3.7 is removed as
typing.get_origin
is needed by this version.
- Instances of
@dataclass
configurable in YAML configurables/files.
- Make
DirectoryCompositeStash.groups
a property that re-configures the instance. - By default YAML configurables use the root as the singleton section.
1.8.0 - 2022-05-04
- Feature to use configuration syntax resolution in evaluated configuration entries.
- Add option to
MultiProcessFactoryStash
to preemptively calculate data existence on a field parameter. - Add
CacheFactoryStash
for read only stashes with a fixed key set that need a backing store. - Command line application
CLI_META
combination useful for inheritance. - Add log format setter to
LogConfigurator
. - A YAML configuration importation class (
ImportYamlConfig
) likeImportIniConfig
.
- Ignore of single configuration file from
ImportIniConfig
bug fix. - More robust error messages for
ImportIniConfig
reads. - Better configuration
eval:
import support.
1.7.3 - 2022-02-12
- Fixed delete and clear functionality in
ShelveStash
. - Make
Settings
more dictionary like and inherit fromDictable
. - Move
DictResolver
andClassResolver
to introspection module.
1.7.2 - 2022-01-30
- The CLI class
EditConfiguration
, which edits the configuration file. - The CLI class
ProgramNameConfigurator
, which adds the inferred program name as a section.
- Section for
ActionCli
decorators over-write that which is defined at the class level for an application inCLI_META
. - Bug fixes for missing configuration when configured to not expect it.
- Remove need for the
class_name
in thecli
section for application contexts. - Remove need for the
cli
section, which defaults to loading the single application sectionapp
.
1.7.1 - 2022-01-12
- Shelve extension calculation is not heuristically calculated by creating a file to fix tests across various (g)dbm libraries across platforms.
- Add file name in
persisted
to pickle error messages. - Better
DirectoryStash
pickle error messages. - Robustly ignore missing config files when the configuration importer is configured not to expect them.
- Simple CLI example.
- Class level properties set on
PersistableContainer
instances to automatically persist attributes. - MacOS keychain
Configurable
for user/password access. ImportConfigFactory
provides a way to create new instances with methodsnew_instance
andnew_deep_instance
.
1.7.0 - 2021-10-22
- Added
frozendict
as a dependency. - App config configuration have a new type (
import
), which allows a^{config_path}
to be substituted with the--config
file name giving more control over the start up load process. - More harness/app factory convenience methods and functionality, such as creating a harness from the app factory.
- Jupyter harness is now reloadable.
- First pass applications return useful data, such as the
config
first pass app.
- All options in the
import
section ofImportIniConfig
must now be proper config data types, which are all lists prefixed withlist:
. - Fixed argument splitting in
CliHarness
. - Changed many cached
dict
to typefrozendict
to guard against unintentional modification of immutable data structures.
1.6.3 - 2021-10-03
CliHarness
usesLogConfigurator
to configure the logging system instead oflogging.basicConfig
.OneShotFactoryStash
inherits fromPrimablePreemptiveStash
and uses its overridden methods to preempt data creationCliHarness
is now more robust, and the default entry point class for large and small Python templates.
- Added Jupyter notebook harness.
- New CLI
ApplicationError
to differentiate between types of errors and when to print the stack trace by having the application factory handle the exception.
1.6.2 - 2021-09-21
- CLI: configuration file option
--config
expected for list action.
1.6.1 - 2021-09-21
- Fix option field mapping and JSON of CLI metadata for list app.
- Do not stringify class in
Dictable.asdict
. - Move dump on load
Stash
toPreemptiveStash
and create aPrimablePreemptiveStash
to replace previously dual merged behavior. - Fix entry point infinite loop call in multi-process in
CliHarness
.
- Positional documentation was added to metadata and list action app output.
- Add a
class:
configuration type to create new classes. - Can now load resources on multiple config files in
ImportIniConfig
.
1.6.0 - 2021-09-07
- Fix GitHub workflows continuous integration.
- Make private data structures that are private and subclass private
respectfully:
Dealloc.ALLOCATIONS
andPersistableContainer.PERSISTABLE_TRANSIENT_ATTRIBUTE
. - Fix to
FactoryStash
for persistingNone
to file system instead of using the factory stash to create the item. - When created instances with a
ConfigFactory
, attributesname
,config
andconfig_factory
are only set when passed keyword arguments do not have them set.
- Removed
zensols.util.Downloader
, which now is relocated to the zensols.install package.
1.5.3 - 2021-08-16
- A simple download with scroll bar utility class (
zensols.util.Downloader
). - Additional logging.
- Speed
OneShotFactoryStash
by declaring worker type.
DelegateStash
andPreemptiveStash
now only calls the delegateclear()
method when theirclear()
method. This is a pretty big change since before, the delegate would call the super method to delete all data by key. This would chain from thePreemptiveStash
to calculate where there is any data at all. Now, the delegate is trusted to simply clear all data from the stash.- Fixed empty INI error, and instead, return empty section set for empty INI files.
1.5.2 - 2021-08-07
- Class resolution in config factories.
- Better de-allocation handling in de-allocation monitor.
- Shelve stash defaults to write back and auto close on, which is the expected and conforming behavior to most other stashes.
1.5.1 - 2021-06-29
- Switch to raw
IniConfig
as default in config factory forini
extension files from theImportIniConfig
. This simplifies when using with anImportIniConfig
, reduces substitution dependencies and suites most use cases. In most cases, it's theImportIniConfig
using this setting, which ends up doing the string interpolation after everything is imported, thus creating less start up configuration read issues. - Shelve stash auto closes between client invocations.
- Use caught errors in application CLI to generate error messages, including missing configuration files.
- Allow CLI configuration importer to set the type of importer.
- Resource de-allocation added to multi-processing stashes.
- Resource de-allocation added to application CLI.
- Resource de-alloocation keywords added to
persisted
andPersistedWork
.
1.5.0 - 2021-04-29
- Follow the same pattern with mnemonics as options: includes/excludes. The
mnemonics
action attribute has changed tomnemonic_overrides
. Bothmnemonic_includes
,mnemonic_excludes
are now optional to more easily select mnemonics in the CLI application class. - Better CLI application usage and support.
- Upgraded PyYAML library for security fix.
- Better
ImportIniConfig
option dependency handling support. - More conventional capitalized messages for raised errors.
- Multi-processing factory stash.
- Support for single process stash creation (set
workers=1
). - More typehints and documentation.
- New error class hierarchy.
- Backward 3.7 compatibility abstract syntax tree compatibility for
ClassInspector
. - Support for overriding configuration in application CLI.
1.4.1 - 2021-03-10
- Bug fix release: enumeration mapping for CLI.
1.4.0 - 2021-03-05
- A new command line generated from configurables, configuration factories and
the meta data of
dataclass
s. - Tutorial based documentation for the new introspection based command line system.
- Old (simple) command line documentation.
1.3.3 - 2021-02-17
- A new
Configurable
class that imports using otherConfigurable
classes:ImportIniConfig
. - A new environment based configuration that can be loaded by
ImportIniConfig
. - Configuration can now quote with a string prefix.
- Configuration can parse lists and create instances of tuple, lists and dictionaries.
ClassResolver
moved tozensols.config
to be used by the newImportIniConfig
.
1.3.2 - 2021-02-13
- Remove unused
StashMapReducer
andFunctionStashMapReducer
since they are obviated byMultiProcessStash
.
- Type hints added to wrapped methods using
@persisted
. Writable
plays better withDictable
usingwrite
.- Anonymous object instances (using
Settings
) used for configuration with given class (class_name
) property. - Basic test case for
MultiProcessStash
. - Instance graphs in documentation.
- Inline
dataclass
documentation and reference fixes.
1.3.1 - 2021-01-12
- Add sections support to
zensols.config.YamlConfig
and other compatibility with super class. - Fix tests for Python 3.9.
- Copy forward documentation from decorators, so
@persisted
(for example) fields generate Sphinx documentation.
1.3.0 - 2020-12-09
Major release.
- In depth top level documentation, including sphinx/API linked docs.
- New
Dictable
creates dictionaries working withdataclasses
and automatically human (more or less) readable usingWritable
. - Much more documentation, both at the API level and top level
README.md
and in./doc
, which now gets compiled in to sphinx docs. - Support for creation of
pathlib.Path
from configuration. - Support for resources from configuration with transparent
pathlib.Path
creation as either installed or run from source tree. - Configuration environment section.
- More test cases for existing and new classes.
- Add class metadata "explorer".
- Default for
zensols.config.ImportConfigFactory.shared
isTrue
. Important: this is a big change, so it would be prudent to retest your dependent code. - Finalize
Writable
interface and change dependent code. - Fixes to deallocation and resource clean up.
- Refactored configuration files by purpose and class with better class hierarchy.
- Refactored stash files by purpose and classes.
- Better more stable
DelegateStash
attribute resolution handling.
1.2.5 - 2020-05-23
- API and framework Sphinx documentation.
1.2.4 - 2020-05-23
- Better logging.
Writable
abstract class used to as an object oriented pretty print based API.- Delegate attribute: flag to pass messages to the delegate.
- Class space defaults set for delegate attribute.
1.2.3 - 2020-05-10
- Meta data walker with class level annotation to better debug stash instance graphs.
Writable
interface that provides a basic multi-line indention specific pretty print.- More unit tests for stashes and increased coverage in other areas.
- Use
testall
to invoke all unit tests. Standardtest
tests all but the time specific unit tests. - More robust configuration reloading strategy.
1.2.2 - 2020-05-05
- Better documentation.
- Fix reload module for
ImportConfigFactory
onreload=True
. - Pass parameters and optionally reload by parameters in
instance
directive in configuration files. - Update super method call style (Python 3.7 at least).
- Make consistent pretty print naming.
- CLI stubs.
- Removed the
ConfigFactory
class. UseImportConfigFactory
is its place.
- Persistable work injections.
- Evaluation statements in configuration now allow for local imports.
ImportConfigFactory
shares in memory instances across configuration sections.
1.2.1 - 2020-04-26
- Fix nested modules not importing.
1.2.0 - 2020-04-24
- Initial version.