1ChangeLog for logilab.common
2============================
3
42021-01-05 -- 1.8.1
5
6    * feature: add tox helpers to make pipy and debian releases
7    * fix: use TypedDict if python version > 3.8 only, otherwise use a Dict
8           (TypedDict were imported from typing_extension 3.7.4, which is not
9           available on debian buster)
10
112020-11-22 -- 1.8.0
12
13    * deprecation: add subclass to DeprecationWarning with structured
14      information (TargetRenamedDeprecationWarning,
15      TargetDeprecatedDeprecationWarning, TargetRemovedDeprecationWarning,
16      TargetMovedDeprecationWarning)
17    * deprecation: add tests to ensure that DeprecationWarning target the
18      correct line and the correct file
19    * deprecation: add types annotations
20    * declare that logilab.common ships type annotations (py.typed file)
21    * various bug fixes
22
232020-09-03 -- 1.7.3
24
25    * type: declare that logilab-common ship type annotations
26    * make the build reproducible
27    * fix(deprecation): stacked decorators breaks getting the real callable
28      __name__ attribute
29    * fix: in some situation (using several deprecation functions), renaming
30      deprecation utils failed to point to the correct new name and used random
31      internal names of the module
32
332020-06-24 -- 1.7.2
34
35    * fix(deprecation): rollback to old class_deprecation being a class behavior
36
372020-06-11 -- 1.7.1
38
39    * fix: import error on re.Pattern with python < 3.7
40
412020-06-10 -- 1.7.0
42
43    * logilab-common requires python 3.6 now
44    * greatly improve our CI and migrate it to heptapod/gitlab-ci
45    * black the whole code base
46    * move test suit to pytest
47    * use check-manifest and fix related bugs in MANIFEST.in
48    * integrates flake8 and please the flake8 gods
49    * various fixes
50    * class_deprecation is not a class anymore
51    * pytest 5.4.2 breaks tests, pin to 5.4.1 for now
52
532020-05-25 -- 1.6.4
54
55    * fix: rollback to old class_deprecation being a class behavior
56    * fix: @functools.wraps broke callable_renamed, write a @lazy_wraps and
57      use it everywhere in logilab.common.deprecation
58    * add docstring to LazyObject
59
602020-05-11 -- 1.6.3
61
62    * fix: metaclass conflict in class_deprecated
63
642020-05-11 -- 1.6.2
65
66    * fix: explicitly requires python 3.6 in setup.py
67
682020-05-01 -- 1.6.1
69
70    * bug fix, bad usage of callable_renamed
71
722020-04-30 -- 1.6.0
73
74    * logilab-common requires python >= 3.6 now
75    * use pyannotates to introduces types in all the modules
76    * introduce a list of new functions in logilab.common.deprecation: callable_renamed, attribute_renamed, argument_renamed, argument_remove
77    * renamed "renamed" to "callable_renamed", "deprecated" to
78      "callable_deprecated", "moved" to "callable_moved" for coherence
79    * refactor the whole logilab.common.deprecation to simplify its code
80    * automatically detect from which modules a deprecated utils is called
81    * correctly display the line where a deprecated utils is used
82    * various small fixes, thx mypy
83
842019-12-04  -- 1.5.2
85
86    * documentation is now available at https://logilab-common.readthedocs.io/
87    * drop python2 support, python >= 3.3 is the new required version
88    * therefor, drop dependency on six
89    * drop rpm packaging
90    * registry: add a Registry.add_select_best_listener method to subscribe to
91      the result of a _select_best of a Registry.
92    * shellutils: deprecate 'input' as argument of RawInput in favor of
93      'input_function'
94
95
962016-10-03  -- 1.3.0
97
98    * pytest: executable deprecated and renamed as logilab-pytest to prevent
99      conflict with pytest provided by http://pytest.org/
100
1012016-03-15  -- 1.2.0
102
103    * pytest: TraceController class, pause_tracing and resume_tracing
104      functions, deprecated from 0.63.1, got removed.  The nocoverage
105      and pause_trace utilities are now available from the testlib
106      module rather than pytest.
107
108    * date: datetime2ticks uses the milliseconds from the datetime objects
109
1102015-10-12  --  1.1.0
111    * configuration: have a stable order for sections (#298658)
112
113    * testlib: clean out deprecated TestCase methods (#1716063), move pytest
114      specifics to pytest.py (#1716053)
115
116    * fix a few python3 bugs in umessage, configuration and optik_ext modules
117
118    * testlib: report failures and skips in generative tests properly
119
120    * optik_ext: return bytes as ints and not floats (#2086835)
121
1222015-07-08  --  1.0.2
123    * declare setuptools requirement in __pkginfo__/setup.py
124
125    * randomize order of test modules in pytest -t
126
1272015-07-01  --  1.0.1
128    * restore __pkginfo__.version, which pylint < 1.4.4 uses
129
1302015-06-30  --  1.0.0
131    * remove unused/deprecated modules: cli, contexts, corbautils, dbf,
132      pyro_ext, xmlrpcutils. __pkginfo__ is no longer installed.
133
134    * major layout change
135
136    * use setuptools exclusively
137
138    * 'logilab' is now a proper namespace package
139
140    * modutils: basic support for namespace packages
141
142    * registry: ambiguous selects now raise a specific exception
143
144    * testlib: better support for non-pytest launchers
145
146    * testlib: Tags() now work with py3k
147
1482014-11-30  --  0.63.2
149    * fix 2 minor regressions from 0.63.1
150
1512014-11-28  --  0.63.1
152    * fix fallout from py3k conversion
153
154    * pytest: fix TestSuite.run wrapper (#280806)
155
156    * daemon: change umask after creating pid file
157
1582014-11-05  --  0.63.0
159    * drop compatibility with python <= 2.5 (#264017)
160
161    * fix textutils.py doctests for py3k
162
163    * produce a clearer exception when dot is not installed (#253516)
164
165    * make source python3-compatible (3.3+), without using 2to3.  This
166      introduces a dependency on six (#265740)
167
168    * fix umessage header decoding on python 3.3 and newer (#149345)
169
170    * WARNING: the compat module no longer exports 'callable', 'izip', 'imap',
171      'chain', 'sum', 'enumerate', 'frozenset', 'reversed', 'sorted', 'max',
172      'relpath', 'InheritableSet', or any subprocess-related names.
173
1742014-07-30  --  0.62.1
175    * shellutils: restore py 2.5 compat by removing usage of class decorator
176
177    * pytest: drop broken --coverage option
178
179    * testlib: support for skipping whole test class and conditional skip, don't
180      run setUp for skipped tests
181
182    * configuration: load options in config file order (#185648)
183
184
185
1862014-03-07  --  0.62.0
187    * modutils: cleanup_sys_modules returns the list of cleaned modules
188
189
190
1912014-02-11  --  0.61.0
192    * pdf_ext: removed, it had no known users (CVE-2014-1838)
193
194    * shellutils: fix tempfile issue in Execute, and deprecate it
195      (CVE-2014-1839)
196
197    * pytest: use 'env' to run the python interpreter
198
199    * graph: ensure output is ordered on node and graph ids (#202314)
200
201
202
2032013-16-12  --  0.60.1
204    * modutils:
205
206    * don't propagate IOError when package's __init__.py file doesn't
207      exist (#174606)
208
209    * ensure file is closed, may cause pb depending on the interpreter, eg
210      pypy) (#180876)
211
212    * fix support for `extend_path` based nested namespace packages ;
213      Report and patch by John Johnson (#177651)
214
215    * fix some cases of failing python3 install on windows platform / cross
216      compilation (#180836)
217
218
219
2202013-07-26  --  0.60.0
221    * configuration: rename option_name method into option_attrname (#140667)
222
223    * deprecation: new DeprecationManager class (closes #108205)
224
225    * modutils:
226
227        - fix typo causing name error in python3 / bad message in python2
228          (#136037)
229        - fix python3.3 crash in file_from_modpath due to implementation
230          change of imp.find_module wrt builtin modules (#137244)
231
232    * testlib: use assertCountEqual instead of assertSameElements/assertItemsEqual
233      (deprecated), fixing crash with python 3.3 (#144526)
234
235    * graph: use codecs.open avoid crash when writing utf-8 data under python3
236      (#155138)
237
238
239
2402013-04-16  --  0.59.1
241    * graph: added pruning of the recursive search tree for detecting cycles in
242      graphs (closes #2469)
243
244    * testlib: check for generators in with_tempdir (closes #117533)
245
246    * registry:
247
248        - select_or_none should not silent ObjectNotFound exception
249          (closes #119819)
250        - remove 2 accidentally introduced tabs breaking python 3 compat
251          (closes #117580)
252
253    * fix umessages test w/ python 3 and LC_ALL=C (closes #119967, report and
254      patch by Ian Delaney)
255
256
257
2582013-01-21  --  0.59.0
259    * registry:
260
261        - introduce RegistrableObject base class, mandatory to make
262          classes automatically registrable, and cleanup code
263          accordingly
264        - introduce objid and objname methods on Registry instead of
265          classid function and inlined code plus other refactorings to allow
266          arbitrary objects to be registered, provided they inherit from new
267          RegistrableInstance class (closes #98742)
268        - deprecate usage of leading underscore to skip object registration, using
269          __abstract__ explicitly is better and notion of registered object 'name'
270          is now somewhat fuzzy
271        - use register_all when no registration callback defined (closes #111011)
272
273    * logging_ext: on windows, use colorama to display colored logs, if available (closes #107436)
274
275    * packaging: remove references to ftp at logilab
276
277    * deprecations: really check them
278
279    * packaging: steal spec file from fedora (closes #113099)
280
281    * packaging force python2.6 on rhel5 (closes #113099)
282
283    * packaging Update download and project urls (closes #113099)
284
285    * configuration: enhance merge_options function (closes #113458)
286
287    * decorators: fix @monkeypatch decorator contract for dark corner
288      cases such as monkeypatching of a callable instance: no more
289      turned into an unbound method, which was broken in python 3 and
290      probably not used anywhere (actually closes #104047).
291
292
293
2942012-11-14  --  0.58.3
295    * date: fix ustrftime() impl. for python3 (closes #82161, patch by Arfrever
296      Frehtes Taifersar Arahesis) and encoding detection for python2 (closes
297      #109740)
298
299    * other python3 code and test fixes (closes #104047)
300
301    * registry: Store.setdefault shouldn't raise RegistryNotFound (closes #111010)
302
303    * table: stop encoding to iso-8859-1, use unicode (closes #105847)
304
305    * setup: properly install additional files during build instead of install (closes #104045)
306
307
308
3092012-07-30  --  0.58.2
310    * modutils: fixes (closes #100757 and #100935)
311
312
313
3142012-07-17  --  0.58.1
315    * modutils, testlib: be more python implementation independant (closes #99493 and #99627)
316
317
318
3192012-04-12  --  0.58.0
320    * new `registry` module containing a backport of CubicWeb selectable objects registry (closes #84654)
321
322    * testlib: DocTestCase fix builtins pollution after doctest execution.
323
324    * shellutil: add argument to ``ProgressBar.update`` to tune cursor progression (closes #88981)
325
326    * deprecated: new DeprecationWrapper class (closes #88942)
327
328
329
3302012-03-22  --  0.57.2
331    * texutils: apply_units raise ValueError if string isn'nt valid (closes #88808)
332
333    * daemon: don't call putenv directly
334
335    * pytest: do not enable extra warning other than DeprecationWarning.
336
337    * testlib: DocTestCase fix builtins pollution after doctest execution.
338
339    * testlib: replace sys.exit with raise ImportError (closes: #84159)
340
341    * fix license in README
342
343    * add trove classifiers (tell about python 3 support for pypi)
344
345
346
3472011-10-28  --  0.57.1
348    * daemon: change $HOME after dropping privileges (closes #81297)
349
350    * compat: method_type for py3k use instance of the class to have a
351      real instance method (closes: #79268)
352
353
354
3552011-10-12  --  0.57.0
356    * only install unittest2 when python version < 2.7 (closes: #76068)
357
358    * daemon: make pidfile world-readable (closes #75968)
359
360    * daemon: remove unused(?) DaemonMixin class
361
362    * update compat module for callable() and method_type()
363
364    * decorators: fix monkeypatch py3k compat (closes #75290)
365
366    * decorators: provide a @cachedproperty decorator
367
368
369
3702011-09-08  --  0.56.2
371    * daemon: call initgroups/setgid before setuid (closes #74173)
372
373    * decorators: @monkeypatch should produce a method object (closes #73920)
374
375    * modutils: allow overriding of _getobj by suppressing mangling
376
377
378
3792011-08-05  --  0.56.1
380    * clcommands: #72450 --rc-file option doesn't work
381
382
383
3842011-06-09  --  0.56.0
385    * clcommands: make registration possible by class decoration
386
387    * date: new datetime/delta <-> seconds/days conversion function
388
389    * decorators: refactored @cached to allow usages such as
390      @cached(cacheattr='_cachename') while keeping bw compat
391
392
393
3942011-04-01  --  0.55.2
395    * new function for password generation in shellutils
396
397    * pyro_ext: allow to create a server without registering with a pyrons
398
399
400
4012011-03-28  --  0.55.1
402    * fix date.ustrftime break if year <= 1900
403
404    * fix graph.py incorrectly builds command lines using %s to call dot
405
406    * new functions to get UTC datetime / time
407
408
409
4102011-02-18  --  0.55.0
411    * new urllib2ext module providing a GSSAPI authentication handler, based on python-kerberos
412
413    * graph: test and fix ordered_nodes() [closes #60288]
414
415    * changelog: refactor ChangeLog class to ease overriding
416
417    * testlib: Fix tag handling for generator.
418
419
420
4212011-01-12  --  0.54.0
422    * dropped python 2.3 support
423
424    * daemon: we can now specify umask to daemonize function, and it return
425      different exit code according to the process
426
427    * pyro_ext: new ns_reregister function to ensure a name is still properly
428      registered in the pyro name server
429
430    * hg: new incoming/outgoing functions backward compatible with regards to
431      mercurial version (eg hg 1.6 and earlier)
432
433    * testlib/pytest: more deprecation and removed code. Still on the way to
434      unittest2
435
436
437
4382010-11-15  --  0.53.0
439    * first python3.x compatible release
440
441    * __init__: tempattr context manager
442
443    * shellutils: progress context manager
444
445
446
4472010-10-11  --  0.52.1
448    * configuration: fix pb with option names as unicode string w/
449      python 2.5. Makes OptionError available through the module
450
451    * textutils: text_to_dict skip comments (# lines)
452
453    * compat: dropped some 2.2 compat
454
455    * modutils: Consider arch-specific installation for STD_LIB_DIR definition
456
457
458
4592010-09-28  --  0.52.0
460    * testlib is now based on unittest2, to prepare its own extinction.
461      Warning are printed so you can easily migrate step by step.
462
463    * restored python 2.3 compat in some modules, so one get a change to run
464      pylint at least
465
466    * textutils: use NFKD decomposition in unormalize()
467
468    * logging_ext: don't try to use ansi colorized formatter when not in debug
469      mode
470
471
472
4732010-09-10  --  0.51.1
474    * logging_ext: init_log function splitted into smaller chunk to ease reuse
475      in other contexts
476
477    * clcommands: enhanced/cleaned api, nicer usage display
478
479    * various pylint detected errors fixed
480
481
482
4832010-08-26  --  0.51.0
484    * testlib: don't raise string exception (closes #35331)
485
486    * hg: new module regrouping some mercurial utility functions
487
488    * clcommands: refactored to get more object oriented api.
489
490    * optparser: module is now deprecated, use clcommands instead
491
492    * textutils: new split_url_or_path and text_to_dict functions
493
494    * logging_ext:
495        - init_log now accept optionaly any arbitrary handler
496        - threshold default to DEBUG if debug flag is true  and no threshold specified
497
498    * date: new ustrftime implementation working around datetime limitaion on dates < 1900
499
500
501
5022010-06-04  --  0.50.3
503    * logging: added new optional kw argument to init_log rotating_parameters
504
505    * date: fix nb_open_days() codomain, positive natural numbers are expected
506
507    * configuration:
508        - skip option with no type, avoid pb with generated option such as long-help
509        - handle level on man page generation
510
511
512
5132010-05-21  --  0.50.2
514    * fix licensing information: LGPL v2.1 or greater
515
516    * daemon: new daemonize function
517
518    * modutils: fix some false negative of is_standard_module with
519      'from module import something" where something isn't a submodule
520
521    * optik_ext: fix help generation for normal optparse using script if
522      optik_ext has been imported (#24450)
523
524    * textutils support 256 colors when available
525
526    * testlib] add option splitlines to assertTextEquals
527
528
529
5302010-04-26  --  0.50.1
531    * implements __repr__ on nullobject
532
533    * configuration: avoid crash by skipping option without 'type'
534          entry while input a config
535
536    * pyro_ext: raise PyroError instead of exception
537
538
539
5402010-04-20  --  0.50.0
541    * graph:
542        - generate methods now takes an optional mapfile argument to generate
543          html image maps
544        - new ordered_nodes function taking a dependency graph dict as arguments
545          and returning an ordered list of nodes
546
547    * configuration:
548        - nicer serialization of bytes / time option
549        - may now contains several option provider with the same name
550        - consider 'level' in option dict, --help displaying only option with level
551          0, and automatically adding --long-help options for higher levels
552
553    * textutils: case insensitive apply_unit
554
555    * sphinx_ext: new module usable as a sphinx pluggin and containing a new
556      'autodocstring' directive
557
558    * ureports: output &#160; instead of &nbsp; for strict xhtml compliance
559
560    * decorators: @cached propery copy inner function docstring
561
562
563
5642010-03-16  --  0.49.0
565    * date: new 'totime' function
566
567    * adbh, db, sqlgen modules moved to the new logilab-database package
568
569    * pytest: when -x option is given, stop on the first error even if
570      there are multiple test directories
571
572
573
5742010-02-26  --  0.48.1
575    * adbh: added dbport optional argument to [backup|restore]_commands
576
577    * db: fix date processing for SQLServer 2005
578
579    * testlib: improve XML assertion by using ElementTree parser and a new 'context' lines argument
580
581
582
5832010-02-17  --  0.48.0
584    * date: fixed mx date time compat for date_range (#20651)
585
586    * testlib: generative test should not be interrupted by self.skip() (#20648)
587
588
589
5902010-02-10  --  0.47.0
591    * adbh: changed backup / restore api (BREAKS COMPAT):
592        - backup_command is now backup_commands (eg return a list of commands)
593        - each command returned in backup_commands/restore_commands may now
594          be list that may be used as argument to subprocess.call, or a string
595          which will the requires a subshell
596        - new sql_rename_col method
597
598    * deprecation: deprecated now takes an optional 'stacklevel' argument, default to 2
599
600    * date: some functions to ease python's datetime module usage have been backported
601      from cubicweb
602
603
604
6052009-12-23  --  0.46.0
606    * db / adbh: added SQL Server support using Pyodbc
607
608    * db:
609        - New optional extra_args argument to get_connection.
610        - Support Windows Auth for SQLServer by giving
611          extra_args='Trusted_Connection' to the sqlserver2005 driver
612
613
614
6152009-11-23  --  0.45.2
616    * configuration:
617      - proper bytes and time option types support
618      - make Method usable as 'callback' value
619      - fix #8849 Using plugins, options and .pylintrc crashes PyLint
620
621    * graph: fix has_path returned value to include the destination node, else we get
622      an empty list which makes think there is no path (test added)
623
624
625
6262009-08-26  --  0.45.0
627    * added function for parsing XML processing instructions
628
629
630
6312009-08-07  --  0.44.0
632    * remove code deprecated for a while now
633
634    * shellutils: replace confirm function by RawInput class /ASK singleton
635
636    * deprecation: new deprecated decorator, replacing both obsolete and deprecated_function
637
638
639
6402009-07-21  --  0.43.0
641    * dbf: a DBF reader which reads Visual Fox Pro DBF format with Memo field (module from Yusdi Santoso)
642
643    * shellutils:
644      - #9764 add title to shellutils.ProgressBar
645      - #9796 new confirm function
646
647    * testlib:
648      - simplify traceback manipulation (skip first frames corresponding to testlib functions)
649      - -c now captures DeprecationWarnings
650
651    * sphinxutils: simplified API
652
653    * modutils: new cleanup_sys_modules function that removes modules under a list
654      of directories from sys.modules
655
656
657
6582009-07-17  --  0.42.0
659    * pyro_ext: new module for pyro utilities
660
661    * adbh: fix default set_null_allowed implementation, new case_sensitive
662      resource descriptor
663
664
665
6662009-06-03  --  0.41.0
667    * modutils: new extrapath argument to modpath_from_file (see function's
668      docstring for explanation)
669
670    * adbh: new alter_column_support flag, sql_set_null_allowed and
671      sql_change_col_type methods
672
673
674
6752009-05-28  --  0.40.1
676    * date: handle both mx.DateTime and datetime representations
677
678    * db: use sqlite native module's Binary, not StringIO
679
680
681
6822009-05-14  --  0.40.0
683    * python < 2.3 are now officially unsupported
684
685    * #9162: new module with some sphinx utilities
686
687    * #9166: use a global variable to control mx datetime / py datetime usage
688
689    * db: add time adapter for pysqlite2, fix mysql bool and string handling
690
691    * configuration: don't print default for store_true / store_false option
692      or option with None as default
693
694
695
6962009-04-07  --  0.39.1
697    * fix #6760 umessage.decode_QP() crashes on unknown encoding
698
699
700
7012009-03-25  --  0.39.0
702    * fix #7915 (shellutils unusable under windows)
703
704    * testlib:
705
706    * new profile option using cProfile
707
708    * allows to skip a module by raising TestSkipped from module import
709
710    * modutils: locate modules in zip/egg archive
711
712    * db: USE_MX_DATETIME global to control usage of mx.DateTime / py datetime
713
714
715
7162009-01-26  --  0.38.0
717    * setuptools / easy_install support!
718
719    * removed some old backward compat code
720
721    * adbh: new intersect_all_support attribute
722
723    * contexts: new pushd context manager
724
725    * shellutils: enhance acquire_lock method w/ race condition
726
727    * configuration: fix case sensitivity pb w/ config file sections
728
729    * pytest: reimplemented colorization
730
731
732
7332009-01-08  --  0.37.2
734    * configuration: encoding handling for configuration file generation
735
736    * adbh: fix Datetime type map for mysql
737
738    * logging_ext: drop lldebug level which shouldn't be there
739
740
741
7422008-12-11  --  0.37.1
743    * contexts: make the module syntactically correct wrt python2.4
744
745
746
7472008-12-09  --  0.37.0
748    * contexts: new module for context managers, keeping py <2.4 syntax compat
749      for distribution (only `tempdir` cm for now)
750
751    * tasksqueue: new module containing a class to handle prioritized tasks queue
752
753    * proc: new module for process information / resource control
754
755    * optik_ext: new time/bytes option types, using textutils conversion function
756
757    * logging_ext: new set_log_methods / init_log utility functions
758
759
760
7612008-10-30  --  0.36.0
762    * configuration:
763      - option yn is now behaving like a flag (i.e --ex : if ex.default=True and --ex in sys.args then ex.value=False)
764      - new attribute hide in option (i.e --ex : if --ex has 'hide':True then the option will not be displayed in man or --help)
765
766    * pytest:
767      - add colors in display
768      - new option --restart that skips tests that succeeded on last run
769
770    * cache: new herits from dict class
771
772    * decorators: add @require_version @require_module that skip test if decorators are not satisfied
773
774
775
7762008-10-09  --  0.35.3
777    * graph: new has_path method
778
779
780
7812008-10-01  --  0.35.2
782    * configuration:
783      - fix #6011: lgc.configuration ignore customized option values
784      - fix #3278: man page generation broken
785
786    * dropped context.py module which broke the debian package when
787      some python <2.5 is installed (#5979)
788
789
790
7912008-09-10  --  0.35.0
792    * fix #5945: wrong edge properties in graph.DotBackend
793
794    * testlib: filter tests with tag decorator
795
796    * shellutils: new simple unzip function
797
798
799
8002008-08-07  --  0.34.0
801    * changelog: properly adds new line at the end of each entry
802
803    * testlib: add a with_tempdir decorator ensuring all temporary files and dirs are removed
804
805    * graph: improve DotBackend configuration. graphiz rendered can now be selected
806      and additional graph parameter used
807
808    * db: support of Decimal Type
809
810
811
8122008-06-25  --  0.33.0
813    * decorators: new @locked decorator
814
815    * cache: make it thread safe, changed behaviour so that when cache size is 0
816      and __delitem__ is called, a KeyError is raised (more consistent)
817
818    * testlib:
819      - added assertIsNot, assertNone and assertNotNone assertion
820      - added assertUnorderedIterableEquals
821      - added assertDirEquals
822      - various failure output improvement
823
824    * umessage: umessage.date() may return unparsable string as is instead of None
825
826    * compat: adds a max function taking 'key' as keyword argument as in 2.5
827
828    * configuration: escape rest when printing for default value
829
830
831
8322008-06-08  --  0.32.0
833    * textutils: add the apply_unit function
834
835    * testlib:
836      - added a assertXMLEqualsTuple test assertion
837      - added a assertIs assertion
838
839
840
8412008-05-08  --  0.31.0
842    * improved documentation and error messages
843
844    * testlib: support a msg argument on more assertions, pysqlite2 as default
845
846    * pytest: pytestconf.py for customization
847
848
849
8502008-03-26  --  0.30.0
851    * db: remember logged user on the connection
852
853    * clcommands: commands may be hidden (e.g. not displayed in help), generic
854      ListCommandsCommand useful to build bash completion helpers
855
856    * changelog: module to parse ChangeLog file as this one, backported from
857      logilab.devtools
858
859
860
8612008-03-12  --  0.29.1
862    * date: new nb_open_days function counting worked days between two date
863
864    * adbh: add -p option to mysql commands to ask for password
865
866
867
8682008-03-05  --  0.29.0
869    * adbh: mysql doesn't support ILIKE, implement list_indices for mysql
870
871    * db: mysql adapter use mx DateTime when available, fix unicode handling
872
873
874
8752008-02-18  --  0.28.2
876    * testlib: restore python2.3 compatibility
877
878
879
8802008-02-15  --  0.28.1
881    * testlib: introduce InnerTest class to name generative tests, fix
882      generative tests description storage
883
884    * pytest: fix -s option
885
886    * modutils: included Stefan Rank's patch to deal with 2.4 relative import
887
888    * configuration: don't give option's keywords not recognized by optparse,
889      fix merge_options function
890
891
892
8932008-02-05  --  0.28.0
894    * date: new `add_days_worked` function
895
896    * shellutils: new `chown` function
897
898    * testlib: new `strict` argument to assertIsInstance
899
900    * __init__: new `attrdict` and `nullobject` classes
901
902
903
9042008-01-25  --  0.27.0
905    * deprecation: new class_moved utility function
906
907    * interface: fix subinterface handling
908
909
910
9112008-01-10  --  0.26.1
912    * optparser: support --version at main command level
913
914    * testlib: added man page for pytest
915
916    * textutils: fix a bug in normalize{_,_rest_}paragraph which may cause
917      infinite loop if an indent string containing some spaces is given
918
919
920
9212008-01-07  --  0.26.0
922    * db: binarywrap support
923
924    * modutils: new LazyObject class
925
926
927
9282007-12-20  --  0.25.2
929    * adbh: new needs_from_clause variable on db helper
930
931
932
9332007-12-11  --  0.25.1
934    * pytest: new --profile option, setup module / teardown module hook,
935              other fixes and enhancements
936
937    * db: mysql support fixes
938
939    * adbh: fix postgres list_indices implementation
940
941
942
9432007-11-26  --  0.25.0
944    * adbh:
945      - list_tables implementation for sqlite
946      - new list_indices, create_index, drop_index methods
947
948    * restore python < 2.4 compat
949
950
951
9522007-10-29  --  0.24.0
953    * decorators: new classproperty decorator
954
955    * adbh: new module containing advanced db helper which were in the "db"
956      module, with additional registered procedures handling
957
958
959
9602007-10-23  --  0.23.1
961    * modutils: fix load_module_from_* (even with use_sys=False, it should
962      try to get outer packages from sys.modules)
963
964
965
9662007-10-17  --  0.23.0
967    * db:
968
969        - mark support_users and support_groups methods as obsolete in
970          favor of users_support and groups_support attributes
971        - new ilike_support property on dbms helpers
972        - extended db helper api
973        - completed mysql support
974
975    * textutils: new unormalize function to normalize diacritical chars by
976      their ascii equivalent
977
978    * modutils: new load_module_from_file shortcut function
979
980    * clcommands: pop_args accept None as value for expected_size_after,
981      meaning remaining args should not be checked
982
983    * interface: new extend function to dynamically add an implemented interface
984      to a new style class
985
986
987
9882007-06-25  --  0.22.2
989    * new 'typechanged' action for configuration.read_old_config
990
991
992
9932007-05-14  --  0.22.1
994    * important bug fix in db.py
995
996    * added history in pytest debugger sessions
997
998    * fix pytest coverage bug
999
1000    * fix textutils test
1001
1002    * fix a bug which provoked a crash if devtools was not installed
1003
1004
1005
10062007-05-14  --  0.22.0
1007    * pytest improvements
1008
1009    * shellutils: use shutil.move instead of os.rename as default action
1010      of mv
1011
1012    * db: new `list_users` and `sql_drop_unique_constraint` methods on
1013      advanced helpers
1014
1015    * deprecation: new `obsolete` decorator
1016
1017
1018
10192007-02-12  --  0.21.3
1020    * fixed cached decorator to use __dict__ instead of attribute lookup,
1021      avoiding potential bugs with inheritance when using cached class
1022      methods
1023
1024
1025
10262007-02-05  --  0.21.2
1027    * fix ReST normalization (#3471)
1028
1029
1030
10312006-12-19  --  0.21.1
1032    * tree: make Node iterable (iter on its children)
1033
1034    * configuration: fix #3197 (OptionsManagerMixin __init__ isn't passing
1035      correctly its "version" argument)
1036
1037    * textutils: new 'rest' argument to normalize_text to better deal with
1038      ReST formated text
1039
1040    * some packaging fixes
1041
1042
1043
10442006-11-14  --  0.21.0
1045    * db:
1046
1047        - new optional keepownership argument to backup|restore_database methods
1048        - only register mxDatetime converters on psycopg2 adapter if
1049          mx.DateTime is available
1050
1051    * moved some stuff which was in common __init__ file into specific
1052      module. At this occasion new "decorators" and "deprecation" modules
1053      has been added
1054
1055    * deprecated fileutils.[files_by_ext,include_files_by_ext,exclude_files_by_ext]
1056      functions in favor of new function shellutils.find
1057
1058    * mark the following modules for deprecation, they will be removed in a
1059      near version:
1060
1061    * astutils: moved to astng
1062
1063    * bind (never been used)
1064
1065    * html: deprecated
1066
1067    * logger/logservice: use logging module
1068
1069    * monclient/monserver (not used anymore)
1070
1071    * patricia (never been used)
1072
1073    * twisted_distutils (not used anymore)
1074
1075    * removed the following functions/methods which have been deprecated for a
1076      while now:
1077
1078    * modutils.load_module_from_parts
1079
1080    * textutils.searchall
1081
1082    * tree.Node.leafs
1083
1084    * fileutils.get_by_ext, filetutils.get_mode, fileutils.ensure_mode
1085
1086    * umessage: more robust charset handling
1087
1088
1089
10902006-11-03  --  0.20.2
1091    * fileutils: new remove_dead_links function
1092
1093    * date: add missing strptime import
1094
1095
1096
10972006-11-01  --  0.20.1
1098    * umessage:
1099      - new message_from_string function
1100      - fixed get_payload encoding bug
1101
1102    * db: default postgres module is now psycopg2, which has been customized
1103      to return mx.Datetime objects for date/time related types
1104
1105
1106
11072006-10-27  --  0.20.0
1108    * db:
1109      - fixed date handling
1110      - new methods on advanced helper to generate backup commands
1111
1112    * configuration: basic deprecated config handling support
1113
1114    * new implementation of pytest
1115
1116    * backport a dot backend from yams into a new "graph" module
1117
1118
1119
11202006-10-03  --  0.19.3
1121    * fixed bug in textutils.normalise_[text|paragraph] with unsplitable
1122      word larger than the maximum line size
1123
1124    * added pytest.bat for windows installation
1125
1126    * changed configuration.generate_config to include None values into the
1127      generated file
1128
1129
1130
11312006-09-25  --  0.19.2
1132    * testlib:
1133      - fixed a bug in find_test making it returns some bad test names
1134      - new assertIsInstance method on TestCase
1135
1136    * optik_ext: make it works if mx.DateTime is not installed, in which case
1137      the date type option won't be available
1138
1139    * test fixes
1140
1141
1142
11432006-09-22  --  0.19.1
1144    * db:
1145
1146        - fixed bug when querying boolean on sqlite using python's bool type
1147        - fixed time handling and added an adapter for DateTimeDeltaType
1148        - added "drop_on_commit" argument to create_temporary_table on db helper
1149        - added missing implementation of executemany on pysqlite2 wrapper to
1150          support pyargs correctly like execute
1151
1152    * optik_ext: fixed "named" type option to support csv values and to return
1153      a dictionary
1154
1155
1156
11572006-09-05  --  0.19.0
1158    * new umessage module which provides a class similar to the standard
1159      email.Message class but returning unicode strings
1160
1161    * new clcommands module to handle commands based command line tool
1162      (based on the configuration module)
1163
1164    * new "date" option type in optik_ext
1165
1166    * new AttrObject in testlib to create objects in test with arbitrary attributes
1167
1168    * add pytest to run project's tests and get rid of all runtests.py
1169
1170    * add pytest option to enable design-by-contract using aspects
1171
1172    * some enhancements to the configuration module
1173
1174
1175
11762006-08-09  --  0.18.0
1177    * added -c / --capture option to testlib.unittest_main
1178
1179    * fixed bugs in lgc.configuration
1180
1181    * optparser: added a OptionParser that extends optparse's with commands
1182
1183
1184
11852006-07-13  --  0.17.0
1186    * python2.5 compatibility (testlib.py + compat.py)
1187
1188    * testlib.assertListEquals return all errors at once
1189
1190    * new "password" option type in optik_ext
1191
1192    * configuration: refactored to support interactive input of a configuration
1193
1194
1195
11962006-06-08  --  0.16.1
1197    * testlib: improved test collections
1198
1199    * compat: added cmp argument to sorted
1200
1201
1202
12032006-05-19  --  0.16.0
1204    * testlib:
1205
1206        - added a set of command line options (PYDEBUG is deprecated,
1207          use the -i/--pdb option, and added -x/--exitfirst option)
1208        - added support for generative tests
1209
1210    * db:
1211      - fix get_connection parameter order and host/port handling
1212      - added .sql_temporary_table method to advanced func helpers
1213      - started a psycopg2 adapter
1214
1215    * configuration: enhanced to handle default value in help and man pages
1216      generation (require python >= 2.4)
1217
1218
1219
12202006-04-25  --  0.15.1
1221    * db: add missing port handling to get_connection function and
1222      dbapimodule.connect methods
1223
1224    * testlib: various fixes and minor improvements
1225
1226
1227
12282006-03-28  --  0.15.0
1229    * added "cached" decorator and a simple text progression bar into __init__
1230
1231    * added a simple text progress bar into __init__
1232
1233    * configuration: fixed man page generation when using python 2.4
1234
1235    * db: added pysqllite2 support, preconfigured to handle timestamp using
1236      mxDatetime and to correctly handle boolean types
1237
1238
1239
12402006-03-06  --  0.14.1
1241    * backported file support and add LOG_CRIT to builtin in logservice module
1242
1243
1244
12452006-02-28  --  0.14.0
1246    * renamed assertXML*Valid to assertXML*WellFormed and deprecated the old name
1247
1248    * fixed modutils.load_module_from_*
1249
1250
1251
12522006-02-03  --  0.13.1
1253    * fix some tests, patch contributed by  Marien Zwart
1254
1255    * added ability to log into a file with make_logger()
1256
1257
1258
12592006-01-06  --  0.13.0
1260    * testlib: ability to skip a test
1261
1262    * configuration:
1263
1264        - cleaner configuration file generation
1265        - refactoring so that we can have more control on file
1266          configuration loading using read_config_file and load_config_file
1267          instead of load_file_configuration
1268
1269    * modutils: fix is_relative to return False when from_file is a file
1270      located somewhere in sys.path
1271
1272    * ureport: new "escaped" attribute on Text nodes, controling html escaping
1273
1274    * compat: make set iterable and support more other set operations...
1275
1276    * removed the astng sub-package, since it's now self-distributed as
1277      logilab-astng
1278
1279
1280
12812005-09-06  --  0.12.0
1282    * shellutils: bug fix in mv()
1283
1284    * compat:
1285          - use set when available
1286          - added sorted and reversed
1287
1288    * table: new methods and some optimizations
1289
1290    * tree: added some deprecation warnings
1291
1292
1293
12942005-07-25  --  0.11.0
1295    * db: refactoring, added sqlite support, new helpers to support DBMS
1296      specific features
1297
1298
1299
13002005-07-07  --  0.10.1
1301    * configuration: added basic man page generation feature
1302
1303    * ureports: unicode handling, some minor fixes
1304
1305    * testlib: enhance MockConnection
1306
1307    * python2.2 related fixes in configuration and astng
1308
1309
1310
13112005-05-04  --  0.10.0
1312    * astng: improve unit tests coverage
1313
1314    * astng.astng: fix Function.format_args, new method
1315      Function.default_value, bug fix in Node.resolve
1316
1317    * astng.builder: handle classmethod and staticmethod as decorator,
1318      handle data descriptors when building from living objects
1319
1320    * ureports:
1321      - new docbook formatter
1322      - handle ReST like urls in the text writer
1323      - new build_summary utility function
1324
1325
1326
13272005-04-14  --  0.9.3
1328    * optik_ext: add man page generation based on optik/optparse options
1329      definition
1330
1331    * modutils: new arguments to get_source_file to handle files without
1332      extensions
1333
1334    * astng: fix problem with the manager and python 2.2 (optik related)
1335
1336
1337
13382005-02-16  --  0.9.2
1339    * textutils:
1340
1341        - added epydoc documentation
1342        - new sep argument to the get_csv function
1343        - fix pb with normalize_* functions on windows platforms
1344
1345    * fileutils:
1346
1347        - added epydoc documentation
1348        - fixed bug in get_by_ext (renamed files_by_ext) with the
1349          exclude_dirs argument
1350
1351    * configuration:
1352      - fixed a bug in configuration file generation on windows platforms
1353      - better test coverage
1354
1355    * fixed testlib.DocTest which wasn't working anymore with recent
1356      versions of pyunit
1357
1358    * added "context_file" argument to file_from_modpath to avoid
1359      possible relative import problems
1360
1361    * astng: use the new context_file argument from Node.resolve()
1362
1363
1364
13652005-02-04  --  0.9.1
1366    * astng:
1367
1368        - remove buggy print
1369        - fixed builder to deal with builtin methods
1370        - fixed raw_building.build_function with python 2.4
1371
1372    * modutils: code cleanup, some reimplementation based on "imp",
1373      better handling of windows specific extensions, epydoc documentation
1374
1375    * fileutils: new exclude_dirs argument to the get_by_ext function
1376
1377    * testlib: main() support -p option to run test in a profiled mode
1378
1379    * generated documentation for modutils in the doc/ subdirectory
1380
1381
1382
13832005-01-20  --  0.9.0
1384    * astng:
1385
1386        - refactoring of some huge methods
1387        - fix interface resolving when __implements__ is defined in a parent
1388          class in another module
1389        - add special code in the builder to fix problem with qt
1390        - new source_line method on Node
1391        - fix sys.path during parsing to avoid some failure when trying
1392          to get imported names by `from module import *`, and use an astng
1393          building instead of exec'ing the statement
1394        - fix possible AttributeError with Function.type
1395        - manager.astng_from_file fallback to astng_from_module if possible
1396
1397    * textutils: fix bug in normalize_paragraph, unquote handle empty string
1398      correctly
1399
1400    * modutils:
1401
1402        - use a cache in has_module to speed up things when heavily used
1403        - fix file_from_modpath to handle pyxml and os.path
1404
1405    * configuration: fix problem with serialization/deserialization of empty
1406      string
1407
1408
1409
14102005-01-04  --  0.8.0
1411    * modutils: a lot of fixes/rewrite on various functions to avoid
1412      unnecessary imports, sys.path pollution, and other bugs (notably
1413      making pylint reporting wrong modules name/path)
1414
1415    * astng: new "inspector" module, initially taken from pyreverse code
1416      (http://www.logilab.org/projects/pyreverse), miscellaneous bug fixes
1417
1418    * configuration: new 'usage' parameter on the Configuration
1419      initializer
1420
1421    * logger: unicode support
1422
1423    * fileutils: get_by_ext also ignore ".svn" directories, not only "CVS"
1424
1425
1426
14272004-11-03  --  0.7.1
1428    * astng:
1429
1430        - don't raise a syntax error on files missing a trailing \n.
1431        - fix utils.is_abstract (was causing an unexpected exception if a
1432          string exception was raised).
1433        - fix utils.get_implemented.
1434        - fix file based manager's cache problem.
1435
1436    * textutils: fixed normalize_text / normalize_paragraph functions
1437
1438
1439
14402004-10-11  --  0.7.0
1441    * astng: new methods on the manager, returning astng with nodes for
1442      packages (i.e. recursive structure instead of the flat one), with
1443      automatic lazy loading + introduction of a dict like interface to
1444      manipulate those nodes and Module, Class and Function nodes.
1445
1446    * logservice: module imported from the ginco project
1447
1448    * configuration: added new classes Configuration and
1449      OptionsManager2Configuration adapter, fix bug in loading options
1450      from file
1451
1452    * optik_ext/configuration: some new option type "multiple_choice"
1453
1454    * fileutils: new ensure_mode function
1455
1456    * compat: support for sum and enumerate
1457
1458
1459
14602004-09-23  --  0.6.0
1461    * db: added DBAPIAdapter
1462
1463    * textutils: fix in pretty_match causing malformated messages in pylint
1464      added ansi colorization management
1465
1466    * modutils: new functions get_module_files, has_module and file_from_modpath
1467
1468    * astng: some new utility functions taken from pylint, minor changes to the
1469      manager API, Node.resolve doesn't support anymore "living" resolution,
1470      some new methods on astng nodes
1471
1472    * compat: new module for a transparent compatibility layer between
1473      different python version (actually 2.2 vs 2.3 for now)
1474
1475
1476
14772004-07-08  --  0.5.2
1478    * astng: fix another bug in klassnode.ancestors() method...
1479
1480    * db: fix mysql access
1481
1482    * cli: added a space after the prompt
1483
1484
1485
14862004-06-04  --  0.5.1
1487    * astng: fix undefined var bug in klassnode.ancestors() method
1488
1489    * ureports: fix attributes on title layout
1490
1491    * packaging:fix the setup.py script to allow bdist_winst (well, the
1492      generated installer has not been tested...) with the necessary
1493      logilab/__init__.py file
1494
1495
1496
14972004-05-10  --  0.5.0
1498    * ureports: new Universal Reports sub-package
1499
1500    * xmlrpcutils: new xmlrpc utilities module
1501
1502    * astng: resolve(name) now handle (at least try) builtins
1503
1504    * astng: fixed Class.as_string (empty parent when no base classes)
1505
1506    * astng.builder: knows a little about method descriptors, Function with
1507      unknown arguments have argnames==None.
1508
1509    * fileutils: new is_binary(filename) function
1510
1511    * textutils: fixed some Windows bug
1512
1513    * tree: base not doesn't have the "title" attribute anymore
1514
1515    * testlib: removed the spawn function (who used that ?!), added MockSMTP,
1516      MockConfigParser, MockConnexion and DocTestCase (test class for
1517      modules embedding doctest). All mocks objects are very basic and will be
1518      enhanced as the need comes.
1519
1520    * testlib: added a TestCase class with some additional methods then
1521      the regular unittest.TestCase class
1522
1523    * cli: allow specifying a command prefix by a class attributes,more
1524      robust, print available commands on help
1525
1526    * db: new "binary" function to get the binary wrapper for a given driver,
1527      and new "system_database" function returning the system database name
1528      for different DBMS.
1529
1530    * configuration: better group control
1531
1532
1533
15342004-02-20  --  0.4.5
1535    * db: it's now possible to fix the modules search order. By default call
1536      set_isolation_level if psycopg is used
1537
1538
1539
15402004-02-17  --  0.4.4
1541    * modutils: special case for os.path in get_module_part
1542
1543    * astng: handle special case where we are on a package node importing a module
1544      using the same name as the package, which may end in an infinite loop
1545      on relative imports in Node.resolve
1546
1547    * fileutils: new get_by_ext function
1548
1549
1550
15512004-02-11  --  0.4.3
1552    * astng: refactoring of Class.ancestor_for_* methods (now
1553      depends on python 2.2 generators)
1554
1555    * astng: make it more robust
1556
1557    * configuration: more explicit exception when a bad option is
1558      provided
1559
1560    * configuration: define a short version of an option using the "short"
1561      keyword, taking a single letter as value
1562
1563    * configuration: new method global_set_option on the manager
1564
1565    * testlib : allow no "suite" nor "Run" function in test modules
1566
1567    * shellutils: fix bug in *mv*
1568
1569
1570
15712003-12-23  --  0.4.2
1572    * added Project class and some new methods to the ASTNGManger
1573
1574    * some new functions in astng.utils
1575
1576    * fixed bugs in some as_string methods
1577
1578    * fixed bug in textutils.get_csv
1579
1580    * fileutils.lines now take a "comments" argument, allowing to ignore
1581      comment lines
1582
1583
1584
15852003-11-24  --  0.4.1
1586    * added missing as_string methods on astng nodes
1587
1588    * bug fixes on Node.resolve
1589
1590    * minor fixes in textutils and fileutils
1591
1592    * better test coverage (need more !)
1593
1594
1595
15962003-11-13  --  0.4.0
1597    * new textutils and shellutils modules
1598
1599    * full astng rewrite, now based on the compiler.ast package from the
1600      standard library
1601
1602    * added next_sbling and previous_sibling methods to Node
1603
1604    * fix get_cycles
1605
1606
1607
16082003-10-14  --  0.3.5
1609    * fixed null size cache bug
1610
1611    * added 'sort_by_column*' methods for tables
1612
1613
1614
16152003-10-08  --  0.3.4
1616    * fix bug in asntg, occurring with python2.3 and modules including an
1617      encoding declaration
1618
1619    * fix bug in astutils.get_rhs_consumed_names, occurring in lists
1620      comprehension
1621
1622    * remove debug print statement from configuration.py which caused a
1623      generation of incorrect configuration files.
1624
1625
1626
16272003-10-01  --  0.3.3
1628    * fix bug in modutils.modpath_from_file
1629
1630    * new module corbautils
1631
1632
1633
16342003-09-18  --  0.3.2
1635    * fix bug in modutils.load_module_from_parts
1636
1637    * add missing __future__ imports
1638
1639
1640
16412003-09-18  --  0.3.1
1642    * change implementation of modutils.load_module_from_name (use find_module
1643      and load_module instead of __import__)
1644
1645    * more bug fixes in astng
1646
1647    * new functions in fileutils (lines, export) and __init__ (Execute)
1648
1649
1650
16512003-09-12  --  0.3
1652    * expect "def suite" or "def Run(runner=None)" on unittest module
1653
1654    * fixes in modutils
1655
1656    * major fixes in astng
1657
1658    * new fileutils and astutils modules
1659
1660    * enhancement of the configuration module
1661
1662    * new option type "named" in optik_the ext module
1663
1664
1665
16662003-06-18  --  0.2.2
1667    * astng bug fixes
1668
1669
1670
16712003-06-04  --  0.2.1
1672    * bug fixes
1673
1674    * fix packaging problem
1675
1676
1677
16782003-06-02  --  0.2.0
1679    * add the interface, modutils, optik_ext and configuration modules
1680
1681    * add the astng sub-package
1682
1683    * miscellaneous fixes
1684
1685
1686
16872003-04-17  --  0.1.2
1688    * add the stringio module
1689
1690    * minor fixes
1691
1692
1693
16942003-02-28  --  0.1.1
1695    * fix bug in tree.py
1696
1697    * new file distutils_twisted
1698
1699
1700
17012003-02-17  --  0.1.0
1702    * initial revision
1703
1704
1705
1706