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   instead of 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