-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathChangeLog
490 lines (412 loc) · 20.8 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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
Changes in version 2.8.0
------------------------
* Fixed issue with the syslog handler and null bytes in messages
* Call handleError on SyslogHandler when exception happens during emit
* Added some utility functions for setting up the log system
- Added set_handler function to set the main handler used by logging
(it will replace all existing handlers on the root logger)
- Added capture_output function to capture and divert standard output
and standard error to the logging system
* Replaced start_syslog with use_syslog and deprecated the former
* Improved detection of non-interactive mode
* Renamed IfNotInteractive to WhenNotInteractive
* Use the real path for runtime and config directories (follow symlinks)
* Added daemon property on Process to check if it's in daemon mode or not
* Check exc_type instead of exc_value in the context manager's __exit__
* Added module level log function to the log module similar to logging.log
* Use the with statement instead of try/finally
* Fixed broad exception statement
* Normalize names for descriptor method arguments
* Removed docstrings from internal functions
* Refactored configuration and runtime settings on Process
* Make the local_root undefined when running from system binary paths
* Only ignore OSError in unlink wrapper
* Use the new octal notation for file modes
* Fixed spelling in exception message
* Ordered imports alphabetically
* Explicitly use python2 in shebang lines
Changes in version 2.7.0
------------------------
* Refactored subclasses function in application.python
- Changed it from a generator to a function that returns a list
- Fixed issue with duplicated items in output
- Significantly improved speed
Changes in version 2.6.0
------------------------
* Allow process to wait for network to become available before starting
* Use getter/setter syntax for defining properties
* Fixed some PEP-8 violations
* Updated license and copyright years
Changes in version 2.5.0
------------------------
* Added subclasses function in application.python
* Refactored logging system
- Aligned log function signatures with those from the logging module.
Context can no longer be provided as keyword arguments to the functions,
it has to be provided through the extra keyword argument.
- Provide a better exception logging function, that can be called without
a message to just log the traceback and which also accepts the exc_info
argument containing an exception info tuple to log a given traceback.
This enhanced version of the exception function is also made available
on the logging.Logger class and is fully backwards compatible.
- Deprecated log.msg and log.err in favor of log.info and log.exception
- Replaced log.Formatter with an enhanced version which can be customized
to obtain a desired logging format without the need to replace it. In
addition a mechanism to set the default formatter is provided in case
the Formatter customization level is not enough for the application.
- Provide the ability to capture and log python warnings. The feature is
turned on by default but can be disabled with capture_warnings(False).
- Provide a ContextualLogger abstract class that can be subclassed to
implement loggers that can modify the logged messages using additional
context that is specific to that particular logger, without the need to
modify the formatter.
- Rewrote LoggingFile using io.IOBase and renamed it to StandardIOLogger
- Simplified NamedLevel and improved it to allow its name to be modified.
- Renamed LevelClass to LevelHandler and improved it to allow defining
new named levels by simply attaching a new NamedLevel attribute to
log.level: log.level.FOOBAR = NamedLevel(number) which will define a
new level named 'FOOBAR' associated with number and register it with
the logging module. Attaching an existing level won't rename it, it
will only create an aliased attribute on log.level
- Added a new 'named_levels' property to log.level which will return a
set with all the registered named levels knows to the logging system.
- Renamed prefix to name in SyslogHandler and start_syslog arguments
* Fixed twisted logger and modified it to use the new twisted logger API
* Allow a log level to format as a string
* Improved performance for limit, making it 4 times faster
* Fixed bug in execute_once with instances that evaluate to boolean False
* Avoid reading a configuration file twice in certain circumstances
* Modernize code and improve PEP-8 compliance
Changes in version 2.1.0
------------------------
* Compacted error logging statements
* Fixed ThreadPool properties
* Fixed min/max boundary checks
* Fixed ThreadPool thread management
* Fixed allocating ThreadPool thread names to avoid duplicates
* Added workers and jobs public read-only properties
* Removed unnecessary private function
Changes in version 2.0.2
------------------------
* Fixed the local config directory in certain contexts
Changes in version 2.0.1
------------------------
* Reverted tuple-form exec to work around bug in python < 2.7.9
Changes in version 2.0.0
------------------------
* Modernize code and improve PEP-8 compliance
* Do not pass mutable values as default arguments
* Fixed __init__ to have the same signature as __new__
* Fixed class method first argument name
* Fixed class method return value for subclasses
* Fixed check for instance type in comparison function
* Fixed test for None values
* Refactored instance method into static method
* Removed unused imports
* Use dict comprehension
* Use next(iterator) instead of iterator.next()
* Removed policing of internal attribute
* Improved object representation
* Removed superfluous empty lines at the end of files
* Adjusted comment to better match code
* Updated some module docstrings
* Store reference to original signal on self rather than the signal module
* Replaced try/del/except/pass on dictionary item with dict.pop(item, None)
* Simplified the preserve_signature decorator
* Made preserve_signature accept any function name and removed memory cycle
* Improved check for input for NetworkRange data type
* Refactored configuration
- Renamed ConfigSectionMeta to ConfigSectionType
- Moved ConfigSection class methods to metaclass
- Added SaveState, to save a ConfigSection state
- Allow reset() to restore arbitrary save states
- Removed __tracing__ and the tracing support
- Added AtomicUpdate context manager
* Refactored time measuring code
- Turned the timer into a context manager to simplify usage
- Removed the need to write an explicit for loop with it
- Made the timer autodetect the necessary loop count
- Calculate and subtract the iteration overhead from the final result
- Added time_probe context manager to time code sections in-place
- Added measure_time decorator to time function calls in-place
* Rewrote weakobjectmap based on MutableMapping (faster)
A side effect of this change is that now __missing__ receives the
actual key being looked up, instead of objectid(key) as before.
While this makes the MutableMapping based implementation backward
incompatible, it is to be considered an improvement.
* Protect weakobjectmap's __repr__ against recursive elements
* Added defaultweakobjectmap type
* Added openfile (same as open but supports 'x' mode and file permissions)
* Have markers appear as boolean False (overwrite __boolean__ to change it)
* Removed the dependency module
* Updated the project URLs
* Removed download URL from setup
* Added __info__ module with package details
* Use the new __info__ module in setup.py
* Added package requirements
* Aggregated copyright and license info from source files into LICENSE
* Updated license file to include a link to the license
* Updated copyright years
* Updated boring file
Changes in version 1.5.0
------------------------
* Added a generic thread pool in application.python.threadpool
Changes in version 1.4.1
------------------------
* Fixed cleaning up weak references in weakobjectmap during shutdown
Changes in version 1.4.0
------------------------
* Simplified and made ThreadLocal descriptor faster
* Added timestamp and datetime properties on notifications
* Made test more efficient
* Removed unnecessary methods
* Removed some old compatibility code
* Added missing __all__ entry in process.py
* Changed order or arguments for timer.end() for convenience
* Added MarkerType metaclass to application.python.types
* Use MarkerType to define markers
* Ordered imports alphabetically
* Do not ignore base exceptions
* Fixed documentation example
* Added missing __all__ to timing.py
* Use MarkerType to define the markers used in queue.py
* Moved imports at the top of the file
* Added weakobjectmap implementation
* Replaced WeakKeyDictionary with newly added weakobjectmap
* Removed some obsolete backwards compatibility code
* Removed compatibility with python2.5
* Replaced some old forms or raising an exception
* Refactored Boolean data type
* Use limit instead of locally defined constrain function
* Be specific when catching exceptions
* Fixed how we access the class attribute to work with subclassing
* Added a center attribute to posted notifications
Changes in version 1.3.2
------------------------
* Fixed the preserve_signature decorator to work with python < 2.7
Changes in version 1.3.1
------------------------
* Added workaround for logging unicode and string objects
* Don't apply str over log records diverted from Twisted
* Fixed the wrapper's default arguments when preserving function signatures
Changes in version 1.3.0
------------------------
* Fixed cleaning up observer weakref proxies after recent Singleton changes
* Return False instead of 0 from NullType.__nonzero__
* Made Null only compare equal with itself
* Removed obsolete application.python.util module
Changes in version 1.2.9
------------------------
* Renamed Singleton's internal attribute to make them less obtrusive
* Fixed detection for the class's __new__ in Singleton
* Added execute_once decorator
Changes in version 1.2.8
------------------------
* Reorganized the application.python package contents
* Added the limit function to restrict a numeric value to a given range
* Added function to recursively create directory and ignore error if exists
* Added classproperty descriptor for defining properties at the class level
* Removed obsolete default_host_ip attribute from application.system
* Improved Null to better act as a class substitute
Changes in version 1.2.7
------------------------
* Release EventQueue events immediately after processing
Changes in version 1.2.6
------------------------
* Use the system path separator when building the list of packages
* Fixed handling of unicode in the syslog logger
Changes in version 1.2.5
------------------------
* Fixed syslog on platforms that do not support it
* Added outgoing_ip_for method to host object
Changes in version 1.2.4
------------------------
* Added NullType in order to allow Null to be pickled
* Made NullType a singleton to prevent multiple instances when unpickling
Changes in version 1.2.3
------------------------
* Improved memory_dump's output using console size information
* Added support for detecting object cycles in application.debug.memory
Changes in version 1.2.2
------------------------
* Made Null from application.python.util an instance. See NEWS.
* Improved processing speed for post_notification.
Changes in version 1.2.1
------------------------
* Added the missing application.log package to the build
Changes in version 1.2.0
------------------------
* Depend on python2.5 or newer
* Modified Null not to return self for __setattr__ and __delattr__
* Added indexing support for the Null class
* Allow a Null object to be a descriptor
* Added __len__ method to the Null class
* Added iteration support for the Null class
* Added __contains__ method to the Null class
* Added context management support to the Null class
* Added discard_observer method to NotificationCenter
* Added comment to clarify behaviour
* Fixed threading issues with adding and removing observers
* Fixed handling of settings which contain uppercase characters and dashes
* Added support for weakly referencing observers in the notification system
* Added example of how to have a weakly referenced notification observer
* Removed deprecated functionality
* Added purge_observer method on NotificationCenter
* Added dynamic host properties to application.system
* Removed resolution test from Hostname configuration data type
* Improved error message for invalid type in IPAddress
* Removed twisted logging backend and added a logging extension for twisted
* Improved logging functions and added some commonly used aliases
* Fixed initial setting of the current log level
Changes in version 1.1.5
------------------------
* Made a ConfigSection iterable as (name, value) pairs
* Modified ConfigSetting to allow any callable to be used as a validator
* Fixed __import__ statement to work with python older than 2.5
* Refactored ConfigSectionMeta to decouple it from ConfigSetting
* Save ConfigSetting's initial default values as cls.__defaults__
* Added __delattr__ on ConfigSectionMeta to prevent deletion of settings
* Added a mechanism to skip applying the type for a ConfigSetting
* Added set/reset capabilities to ConfigSection
* Enhanced ConfigFile.get_section with filtering and default return value
for missing section capabilities
* Reworded docstrings to fit in width on a standard terminal
* Allow ConfigSection.__configfile__ to be an instance of ConfigFile too
* Added read capabilities directly on ConfigSection classes
* Improved caching mechanism in ConfigFile
* Use ConfigSection's read capabilities instead of ConfigFile.read_settings
* Added support for specifying the configuration file type in ConfigSection
* Deprecated ConfigFile.read_settings and dump_settings
* Added local_config_directory property on Process
* Deprecated using __configfile__ in favor of __cfgfile__ on ConfigSection
* Added filename attribute to ConfigFile instances
* Added __str__ representation to ConfigSection
* Added tracing capabilities to ConfigSection
* Replaced dump_settings function body with printing the class
* Updated ConfigSection's docstring to describe the special attributes
* Rephrased exception message for clarity
* Modified data type converters to accept what they generate as input
* Updated examples to match the latest configuration API changes
Changes in version 1.1.4
------------------------
* Allow version numbers without the micro or minor number
* Added concept of undefined version that compares lower than any other
* Added missing entry about notification.py example
* Added dependency module and example
Changes in version 1.1.3
------------------------
* Added isdescriptor function to application.python.descriptor
* Fixed handling of special attributes in ConfigSection subclasses
* Fixed ConfigSection behaviour with multi-level inheritance
Changes in version 1.1.2
------------------------
* Deprecated config_directory in favor of system_config_directory
* No longer raise an exception when setting the system config directory,
if the directory doesn't exist
* Changed datatypes.Boolean into a validator
* Added ConfigSetting descriptor that is meant to deprecate the use of the
_datatypes mapping when declaring setting types inside a ConfigSection
* Deprecated ConfigFile.get_option in favor ConfigFile.get_setting
* Added support for specifying a config file and section in ConfigSection
* Fixed memory leak caused by ThreadLocal not releasing some internal data
* Added WriteOnceAttribute descriptor
* Added note about restrictions that apply when using the new descriptors
* Added version module
* Bumped debian standards version to 3.8.2
* Fixed lintian warning about missing misc:Depends dependency
* Modified examples to honor the latest changes in the API
Changes in version 1.1.1
------------------------
* By default show rate when measuring timing
* For better visibility log deprecation warning with log.warn
* Deprecated _defaultPort and _name in favor of default_port and name
* Use a better description for an endpoint address
* Define log levels ALL and NONE consistently with the others
* Added LogLevel configuration data type
* Replaced deprecated startSyslog with start_syslog in examples
Changes in version 1.1.0
------------------------
* Allow process.runtime_file(None) and return None for it
* Switched from python-central to python-support
* Enhanced the Singleton metaclass to properly handle classes that take
arguments in __init__ and/or __new__
* Extended singleton example with classes that take arguments to __init__
* Added descriptor that allows objects to have thread specific attributes
* Added a new module that implements a notification system
* Added example script for notification system
* Do not indent subsequent lines in a multi line log in syslog
* Simplified logging of multi-lines in syslog
* Specify the priority when logging to syslog, based on the message type
* Implemented fallback log capabilities via the logging module
* Added prefix to debug log records with twisted backend
* Add prefix to log lines when logging to console with twisted backend
* Added log level support to application.log module
* Removed system identifier when logging to syslog in twisted backend
* Added start_syslog function and deprecated startSyslog variant
* Updated README with information about the new notification module
* Added NEWS file to document user visible changes between versions
* Updated debian description to include the new notification system
* Updated debian dependencies
* Bumped debian standards version
Changes in version 1.0.9
------------------------
* Better method to determine the default host IP address.
* Renamed host_ip to default_host_ip for clarity.
* Renamed application/util.py to application/system.py
Changes in version 1.0.8
------------------------
* Added LICENSE and ChangeLog.
* Rephrased some docstrings and descriptions.
* Added docstring to the Process class.
* Do not automatically import the timing module when the debug
module is imported.
* Made Process and Signals singletons.
* Updated util module description.
* Removed some obsolete commented code.
* Added some usage examples.
* Do not compress .py and .ini example files.
* Renamed mixed case functions in the configuration module to use
names with underscores for consistency.
* Renamed argument otype to type in the get_option function.
* Renamed thisHostIP to host_ip.
* Generalized configuration handling by adding the ConfigFile class.
With this multiple distinct configuration files can eb handled at the
same time and it makes it easier to specify the configuration file name
from the application than the less flexible module file name attribute.
* Removed configuration module functions which were made obsolete by the
addition of ConfigFile.
* Replaced _dataTypes attribute on ConfigSection with _datatypes.
Changes in version 1.0.7
------------------------
* In setup.py take the long description from README.
Changes in version 1.0.6
------------------------
* Added missing import in the queue module.
Changes in version 1.0.5
------------------------
* Added methods for controlling the event processing workflow
- pause/unpause/resume - to control event processing
- accept_events/ignore_events - to control event acceptance
- empty - to purge events already on the queue
* Allow unhandled events in a CumulativeEventQueue to be preserved.
* Capture unhandled exceptions from a queue's event handler.
* Fixed some docstrings and error messages in the queue module.
Changes in version 1.0.4
------------------------
* Added application.python.queue module.
Changes in version 1.0.3
------------------------
* Added usage example for the decorator module.
Changes in version 1.0.2
------------------------
* Added application.python submodule. It contains python related utilities
and helpers (currently it contains the decorator and util modules).
* Added decorator support in application.python.decorator.
* Moved the Singleton and Null classes from application.util to
application.python.util.
* Updated years in copyright info.
Changes in version 1.0.1
------------------------
* Fixed issue with printing the memory dump in multi threaded environments.
* Ignore one time collectable garbage generated before the memory debug
module is imported.