-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
208 lines (186 loc) · 9.36 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
6.0.0
- Remove Node, NodeList classes from the package
- Use dewi-dataclass package with changed class name / functionality
named as DataClass, DataList
- Updated README
5.4.0
- Node: load creates Node/NodeList if possible for unknown members
- Node.create() accepts only kwargs
- logger: use Node's create() method
- use type annotations w/o typing module, requires python 3.10+
- requires Python 3.10+
5.3.0
- Add Node.create() factory method
- TestCase: add lowercase alias method, assert_no_logs
- logger: ensure that a Logger with a specific name is created only once
to avoid log entry multiplication
5.2.0
- Fix application's --cwd parameter; change directory as needed
- Add support of multiple loggers based on the Application's logger config
using create_logger_for()
- global logger is '_logger', shouldn't be used directly
5.1.1
- Application: updated to work with click 8.1.0 (and also with 8.0.x).
5.1.0
- Application:
* add optional description parameter
* print cmd name if exception occurs during arg registration
- remoting: use click, too (remained as special case)
- OptionContext:
* add nestable groups
* add back the 'choices' option from argparse, replaced internally
in add_XXX methods
* required mutually excl groups: better error msg if an option is missing
- show runtime of the command at the end if env var set: DEWI_SHOW_RUN_TIME=1
5.0.1
- follow-up a change in pyyaml, CLoader may be Loader without C
- small fix for Python 3.10 (collections -> collections.abc.Mapping)
5.0.0
- add support of versioning - Application's version param, and if set,
the --version command-line option
- add Rails-like environment and config dir support, env var is DEWI_ENV
- loader Context is Node-based
- add IniConfig and DictConfigParser - moved from dewi-utils
- add AppConfig to have app-wide global config - projects, work dir (workspace dir)
- add find_file_recursively - moved from dewi-utils
- add support of extensible projects
- yaml: add load_yaml wrapper; save_to_yaml's second args is optional; stdout ('-') is the default
- node.Node:
* it's sealable by subclasses with _seal() class; use _unseal() for further extensions
* add __contains__ (`'something' in the_node`)
* add create_from(cls, data: dict) class method
- add dewi_core/utils/log_dict.py with log_debug_dict()
- rewrite Application, Command, etc. to use click package instead of argparse
- relicense under the terms of Apache License v2.0
4.0.0
- add support of remoting by (de)serializing Namespace and run
the current command (eg. via SSH on a remote server)
- add partial code for XML-based man pages of the commands
- CommandRegistry got all functionality of CommandRegistrar, which is removed
- Application:
* simplified, subclasses like SingleCommandApplication are removed;
plugin loading is explicit (Application.load_plugin and load_plugins)
* add --cwd option to run from that directory
- Python 3.8+ is required (3.7 is not tested)
3.3.0
- commands: log missing subcommand
- miniapp.py, application.py: extract common codes,
the miniapp.ApplicationBase is the base class from now on
subcommand registration is textracted into commands.py
- fix check of DEWI_DEBUG=1
- levenshtein: update based on git - better suggestions, too
- exception handling is moved into dewi_core.utils.exception
and use only documented interface - broken by Python 3.8
- logger creation is moved into dewi_core.logger
- Python 3.7+ (used with Python 3.8+)
- yaml: ignore references, except if DEWI_YAML_WITH_ALIASES is set to non-'0'
3.2.0
- Added "miniapp" module covering the application.SingleCommandApplication's
features but the original Application's parameters are also added
- Application: listing commands use minimal screen width (bugfix)
- subcommand: properly print help command if single command application is used
3.1.0
- Application: support DEWI_DEBUG environment var, if it is '1',
debug mode is used (same as Application's '--debug' option)
- Application: remove dead code, as there is at least one suggestion
if command is not found
- Add SimpleApplication: no loader, just the program name and a plugin name
- Update examples
- Remove Plugin.get_description(), it was never used. It does not break any
plugin having this method. Using docstring instead.
- Add recursive SubCommand support: a Comand and also the SubCommands
can have subcommands via the subcommand_classes member
- Update code to change deprecated implementation to an up-to-date one.
- Update tests and Makefile
3.0.0
- Add SinglePluginApplication class, a subclass of MainApplication
- Add SingleCommandApplication class, a sublcass of MainApplication,
it disables application-level options
- MainApplication is renamed to Application as it's a generic app class
- application.py's non-public classes (the commands) got '_' prefix
2.0.1
- fix package requirements in setup.py
- start using semantic versioning
2.0
- !!! DEWI goes into multiple repositories and packages
- use only 'protected' members with single leading underscore ('_')
- MainApplication: argparse.Namespace object's 'protected', custom
members end with '_' instead of leading '_', as they are touched
from MainApplication and can be read anywhere
- Plugin: add '_r()' for simpler command registration,
removed default depenency - it's empty list
- Keep logger, config, plugin, and MainApplication classes with their
dependencies, others are in different packages
1.5
- MainApplication: --debug implies --log-level debug
default log level: info
- images/filedb: add count() to count entries in photo_file_info table
- images related commands: use exiftool-5.26 as MacPorts updated it
- safe_delete_images: handle Exceptions at unlink(), mainly PermissionErrors
- add further log_*() calls into dewi.rrdtool & realtime_sync
1.4
- pretty-print output command list (e.g. 'list-all')
- add dewi.utils.archive, which contains an UnZip class to (partially) unzip
.zip files
- if a command is mistyped or non-existing, print at most 6 similar command
names, or list all of them
- dewi.images.filedb: add rollback() method to FileDatabase
- dewi.core.context: Context got 'commands' and 'command_registry'
properties, and always contains the corresponding 'commands' and
'commandregistry' fields
- introduce dewi.core.logger module, log_debug, log_info, etc. can be used
1.3
- fix setup.py
1.2
- add Connection class and ensure_connection() method to kayako module
to reuse calculated signature and provide an object for easier testing
- config/node: add NodeList and also test the module
- rrdtool: use NodeList & fix modifiers
- NetworkCardVendors: add option to prevent network usage
- logparsers: add support to add multiple callbacks to a pattern:
during log processing one pattern matching - multiple calls.
And ensure that '\n' (0x10) is handled only as log line separator
- add lithurical command to print events of a calendar year
- kayako: add TicketStatus and TicketStatuses classes
1.1
- add support of generating .PNG files from .rrd files in a munin directory
- dewi.utils.yaml: add the module to save a dict to a YAML file
- config/node.py: add Node.load_from() to load from a dict (from eg. YAML);
- config/node: __setattr__ checks whether key is already in the node
- config/config: add _top_level_unsafe_set() used by subclasses, for self[key] = value
- logparser: add ISO8601Parser.to_datetime, reuse it in to_timestamp
- dewi.core.application: add list and list-all commands, w/o args 'list' is used
1.0
- It can be marked as stable.
- Changed to LGPL, to use freely in proprietary code (eg. by me)
0.90
- Major update
- in_directory() context manager
- a product list loader
- module for lutheran lithurgical feasts
- main app: --wait to wait before exiting (useful on Windows)
- main app: --debug / --print-backtrace options
- dewi.module_framework: add module support for any command (see README.rst)
* another Config() as dewi.config.Config() class
* Messages() class
- dewi.logparser: parse logs in a directory + modules (see README.rst)
- dewi.utils.network: MAC to vendor mapping
- dewi.utils.dictionaries: customized behaviour of dicts
- dewi.utils.render.py: add Jinja2 TemplateRenderer
- dewi.realtime_sync + filesync (treesync):
sync a directory tree (source code) to a local or remote directory with rules
- dewi.utils.process: find_binary/which to search for executable in PATH
- dewi.utils.kayako_rest: Request + Host classes to communicate with Kayako's REST API
- dewi.config.node: Node is a typesafe dict for dewi.config module
- dewi.images + 4 commands to sort photos from multiple locations:
* collect-images -> to an SQLite DB
* select-images: select useful entries from collected images
* dedup-images: copy unique images into a new location (original -> new mapping is in DB)
* safe-delete-images: delete images that are copied by dedup-images (if already copied)
- add examples + updated README.rst
0.1
- Initial release
- Supports / provide plugins and commands
- Added edit command, to easily open file with vim at a specific line,
the argument can be copied directly from anything which have similar
output as grep -nH ... | cut -f-2 -d: