CHANGES
=======

3.21.0
------

* Allow 'get_all_class_names' to pass kwargs

3.20.0
------

* Add toggle 'dashed' to 'generate_uuid' function
* Show team and repo badges on README

3.19.0
------

* Updated from global requirements
* Improve eventlet check when selecting Event backend
* Updated from global requirements

3.18.0
------

* Add option to not truncate built-ins
* Create dictutils and add 'flatten_dict_to_keypairs'
* Updated from global requirements
* Add reno for release notes management
* Trivial fixes to the usage doc
* Add threading<->eventlet compatible Event
* Updated from global requirements
* [TrivialFix] Replace 'assertEqual(None, ...)' with 'assertIsNone(...)'

3.17.0
------

* Add method is_valid_mac
* Add __ne__ built-in function
* Make method import_versioned_module work
* Change assertTrue(isinstance()) by optimal assert
* doc: Fix docstring of method bool_from_string
* Change assertTrue(isinstance()) by optimal assert
* Add method is_valid_boolstr
* Add method is_valid_ipv6_cidr
* Updated from global requirements
* Updated from global requirements
* Add missing specs_matcher documentation
* Update homepage with developer documentation page
* Updated from global requirements
* Updated from global requirements
* Add utils for validating and splitting quotes
* Updated from global requirements
* Extend specs matcher to support ">" and "<"
* Remove discover from test-requirements

3.16.0
------

* Fix mask_dict_password for non string/dict type key in dict
* Restore <all-in> operator
* More unit tests for specs matcher
* Imported Translations from Zanata
* Add Python 3.5 classifier and venv
* Use an actual well defined parser for spec matching
* Remove unused LOG to keep code clean
* Updated from global requirements

3.15.0
------

* Add basic docstrings to stopwatch has_started/stopped methods
* Make mask_dict_password consistent with mask_password
* Updated from global requirements
* improve tests for mask_password and mask_dict_password
* Simplify boolean expression in executils.py

3.14.0
------

* Support json format output from qemu command
* Fix flake8 issues
* Use is_valid_ipv4 in get_ipv6_addr_by_EUI64
* Imported Translations from Zanata

3.13.0
------

* Allow assigning "0" to port

3.12.0
------

* Updated from global requirements
* Fix method split_path's docstring 'versionadded'
* Updated from global requirements
* Updated from global requirements
* Avoid catching generic exception
* Remove method total_seconds in timeuitls
* Fix is_valid_cidr raises TypeError

3.11.0
------

* Trivial: ignore openstack/common in flake8 exclude list
* Move method split_path into oslo.utils

3.10.0
------

* Imported Translations from Zanata
* Updated from global requirements
* Move nova extra_specs_ops to oslo.utils

3.9.0
-----

* Imported Translations from Zanata
* Provide single step check if eventlet is monkey_patched
* Add method is_valid_cidr to netutils
* Updated from global requirements
* Updated from global requirements
* Add importutils.import_any method
* Add excutils.exception_filter
* Explicitly exclude tests from bandit scan
* Add CHAPPASSWORD to list of sanitize keys
* Enable bandit in gate
* Updated from global requirements

3.7.0
-----

* Add method check_string_length
* Add missing versionchanged for configdrive

3.6.0
-----


3.5.0
-----

* Updated from global requirements
* Imported Translations from Zanata
* Remove bandit.yaml in favor of defaults
* Updated from global requirements
* Narrow mock for getfilesystemencoding
* Update translation setup
* Revert "Use assertTrue/False instead of assertEqual(T/F)"
* Updated from global requirements
* Updated from global requirements
* Add excutils.save_and_reraise_exception force_reraise + capture
* Add encodeutils.to_utf8() function
* Create secretutils and include 'constant_time_compare' function
* Fix coverage
* Imported Translations from Zanata
* Updated from global requirements

3.4.0
-----

* Updated from global requirements
* Use assertTrue/False instead of assertEqual(T/F)
* Add a mechanism to mask passwords in dictionaries
* Add "configdrive" to the list of keys used by mask_password()
* assertIsNone(val) instead of assertEqual(None,val)

3.3.0
-----

* Fix DeprecationWarning when call method delta_seconds
* fix fnmatch.filter in non-posix system
* fix fileutils ut code random failure
* Add missing doc index for imageutils and fnmatch
* re-implement thread safe fnmatch
* Fix the bug of can't get the desired image info

3.2.0
-----

* Revert "Move netifaces to extras"
* Remove Babel from requirements

3.1.0
-----

* Remove duplicated profiles section from bandit.yaml
* Allow get_class_name to accept bound method and class method
* deprecate timeutils.total_seconds()
* Move imageutils from oslo-incubator to oslo.utils
* add comment explaining why we don't want extra values passed to mask_password
* networkutils: drop python 2.6 support
* Remove 'MANIFEST.in'
* Move netifaces to extras

3.0.0
-----

* Add a bandit target to tox.ini
* Updated from global requirements
* Remove python 2.6 classifier
* Fix wrong bug tracking link
* Remove python 2.6 and cleanup tox.ini
* Refactor Port number validation
* Add useful 'time_it' decorator

2.8.0
-----

* Fix get_class_name() on Python 3
* Added ICMP 'type' and 'code' checking capability to 'netutils' module
* Updated from global requirements
* Imported Translations from Zanata
* comment in write_to_tempfile
* Use versionadded and versionchanged in doc

2.7.0
-----

* Expose function signature fetching function
* Allow 'forever_retry_uncaught_exceptions' to take in different defaults
* Write document for each unit of oslo_utils.utils
* Fix usage of "deprecated" markup in docstrings
* Just use 'exception_to_unicode' to handle exception to string
* Add 'secret' to sensitive keys

2.6.0
-----

* Fix coverage configuration and execution
* Use a stopwatch in 'forever_retry_uncaught_exceptions'
* No need for Oslo Incubator Sync
* Make forever_retry_uncaught_exceptions handle its own failures
* Ensure stopwatch __enter__, __exit__ are in docs
* Add some timeutils stop watch examples
* Imported Translations from Zanata
* Move 'history' -> release notes section
* Fix bad acting classes and 'is_bound_method' check
* Change ignore-errors to ignore_errors
* Updated from global requirements
* If 'bool_from_string' provided a boolean just return it
* Imported Translations from Zanata
* only capture the ImportError when importing
* Add 'token' to list of fields to be santized by mask_password

2.5.0
-----

* Updated from global requirements
* Imported Translations from Transifex
* Updated from global requirements
* Updated from global requirements

2.4.0
-----


2.3.0
-----

* Updated from global requirements
* Update docstring on stop watch to reflect monotonic lib. usage
* Updated from global requirements
* flake8 - remove unused rules
* Bump monotonic to 0.3 to remove exception catching on import
* Provide a common exception caused by base class
* Imported Translations from Transifex
* Allow access to reflection 'get_members'
* Updated from global requirements

2.2.0
-----

* Imported Translations from Transifex
* Updated from global requirements

2.1.0
-----

* Imported Translations from Transifex
* Updated from global requirements
* Adding checking around the monotonic import

2.0.0
-----

* Updated from global requirements
* Updated from global requirements
* Add oslo.config to test requirements
* Remove oslo namespace package
* Updated from global requirements

1.9.0
-----

* Updated from global requirements
* versionutils: add version convert helper methods
* Imported Translations from Transifex
* Add write_to_tempfile back to fileutils
* Use monotonic library to avoid finding monotonic time function
* Fix exception_to_unicode() for oslo_i18n Message

1.8.0
-----

* Add fileutils to oslo_utils
* Updated from global requirements
* Add tox target to find missing requirements

1.7.0
-----

* Updated from global requirements
* Updated from global requirements
* Switch badges from 'pypip.in' to 'shields.io'
* timeutils: fix newer/older comparison with TZ aware datetime
* Replace parse_strtime with parse_isotime in older/newer

1.6.0
-----

* Add pytz to requirements
* Deprecate strtime
* Imported Translations from Transifex
* timeutils: utcnow() can return a value with a timezone
* Add 'raise_with_cause' chaining helper to excutils
* timeutils: deprecate isotime()
* timeutils: make marshall timezone aware
* Advertise support for Python3.4 / Remove support for Python 3.3
* Updated from global requirements
* Add exception_to_unicode() function
* Remove run_cross_tests.sh
* Imported Translations from Transifex
* Move versionutils into place and remove deprecation tools
* Denote monotonic import ordering + usage

1.5.0
-----

* Add liberty release name to versionutils
* Expose opts entry point for version_utils
* Switch from oslo.config to oslo_config
* Remove oslo.log code and clean up versionutils API
* Remove code that moved to oslo.i18n
* Enhance versionutils.deprecated to work with classes
* Add Kilo release name to versionutils
* Allow deprecated decorator to specify no plan for removal
* Uncap library requirements for liberty
* Add JUNO as a target to versionutils module
* Add missing reflection + uuidutils docs
* timeutils: avoid passing leap second to datetime
* Add pypi download + version badges
* Cleanup README.rst and setup.cfg
* pep8: fixed multiple violations
* Use oslotest instead of common test module
* Use hacking import_exceptions for gettextutils._
* fixed typos
* Fix violations of H302:import only modules
* Adds decorator to deprecate functions and methods
* Remove vim header
* Add `versionutils` for version compatibility checks
* Update hacking setting
* Updated from global requirements
* Imported Translations from Transifex
* Clean up TestIsIPv6Enabled
* Fix test_netutils: stop patches
* Add a new string to the list of masked patterns
* Provide common `fetch_current_thread_functor` function
* Imported Translations from Transifex

1.4.0
-----

* Add a stopwatch + split for duration(s)
* Allow providing a logger to save_and_reraise_exception
* Updated from global requirements
* Utility API to generate EUI-64 IPv6 address

1.3.0
-----

* Add a eventlet utils helper module
* Add microsecond support to iso8601_from_timestamp
* add dependency warning to requirements.txt
* Updated from global requirements
* Update Oslo imports to remove namespace package
* Add TimeFixture
* Add microsecond support to timeutils.utcnow_ts()
* Make setup.cfg packages include oslo.utils

1.2.1
-----

* Return LOCALHOST if no default interface
* fix link to bug tracker in README

1.2.0
-----

* Improve performance of strutils.mask_password
* Move files out of the namespace package
* Add method is_valid_port in netutils
* Support non-lowercase uuids in is_uuid_like
* Add 'secret_uuid' in _SANITIZE_KEYS for strutils
* Imported Translations from Transifex
* Workflow documentation is now in infra-manual

1.1.0
-----

* Improve error reporting in _get_my_ipv4_address()
* Add get_my_ip()
* Updated from global requirements
* Add 'auth_password' in _SANITIZE_KEYS for strutils
* Updated from global requirements
* Activate pep8 check that _ is imported
* Add uuidutils to oslo.utils
* Add pbr to installation requirements
* Updated from global requirements
* Add is_int_like() function
* Hide auth_token and new_pass
* Imported Translations from Transifex
* Add history/changelog to docs
* Imported Translations from Transifex
* Support building wheels (PEP-427)
* Imported Translations from Transifex
* Improve docstrings for IP verification functions
* Imported Translations from Transifex
* Add ip address validation
* Fix how it appears we need to use mock_anything to avoid 'self' errors
* Updated from global requirements
* Move over a reflection module that taskflow uses
* Make safe_encode func case-insensitive
* Enable mask_password to handle byte code strings
* Updated from global requirements

1.0.0
-----

* Imported Translations from Transifex
* Add the ability to extract the query params from a urlsplit
* Work toward Python 3.4 support and testing
* warn against sorting requirements
* Remove unused dependency on oslo.config
* Updated from global requirements
* Just use int(BOOL) to convert to 1 or 0
* Re-enable _import* hidden methods in import_utils

0.2.0
-----

* Make strutils.mask_password more secure
* New public API for mask_password ported from incubator
* Imported Translations from Transifex

0.1.1
-----

* Make return type from urlsplit private
* Add API docs and clean up other docs
* Make the i18n integration module private
* Cleaning up index.rst file
* export only try_import in __all__
* Switch to oslo.i18n and remove any dependency on oslo-incubator
* Move units into oslo.utils
* Switch to standard python logging
* Setup for translation
* Split strutils into 2 different modules
* Rename network_utils into netutils
* get pep8 working
* Get the tox tests working
* exported from oslo-incubator by graduate.sh
* Fixed a new pep8 error and a small typo
* Set pbr 'warnerrors' option for doc build
* fixed typos found by RETF rules
* Use moxstubout and mockpatch from oslotest
* Remove ValueError when accessing sys.modules
* Enable configuring tcp keepalive
* Avoid raising index error when no host
* Remove str() from LOG.* and exceptions
* Remove import workaround of SplitResult
* Use oslotest instead of common test module
* Partial fix of test_strutils.py on Python 3
* Fix safe_encode(): return bytes on Python 3
* urlsplit issues with IPv6 addresses in python26
* save_and_reraise_exception: make logging respect the reraise parameter
* strutils: Allow safe_{encode,decode} to take bytes as input
* Fix import order in test_excutils
* Update oslo log messages with translation domains
* Implements SI/IEC unit system conversion to bytes
* Add basic Python 3 tests
* py3kcompat: remove
* Deleted duplicated method in cliutils
* strutils bool_from_string, allow specified default
* Utilizes assertIsNone and assertIsNotNone
* Fix spelling errors in comments
* Use hacking import_exceptions for gettextutils._
* Correct invalid docstrings
* Fix a bug in safe_encode where it returns a bytes object in py3
* Fix typo in parameter documentation (timeutils)
* Avoid TypeError in is_older_than, is_newer_than
* Remove vim header
* Use py3kcompat urlutils functions instead of urlparse
* Add helper method total_seconds in timeutils.py
* Do not name variables as builtins
* Use six.text_type instead of unicode function in tests
* Fix typos in oslo
* Adjust import order according to PEP8 imports rule
* python3: use six.text_types for unicode()
* Don't shadow str
* Fix timeutils.set_override_time not defaulting to current wall time
* Fix misused assertTrue in unit tests
* Optimize timeutils.utcnow_ts()
* excutils: replace unicode by six.u
* excutils: use six.reraise to re-raise
* Replace using tests.utils part2
* Bump hacking to 0.7.0
* Replace using tests.utils with openstack.common.test
* BaseException.message is deprecated since Python 2.6
* Enable H302 hacking check
* Add conditional exception reraise
* python3: Add python3 compatibility
* Make AMQP based RPC consumer threads more robust
* Add network_utils.urlsplit
* Remove useless logging in networks_utils
* python3: Fix traceback while running python3
* Refactors to_bytes
* Add slugify to strutils
* Enable hacking H404 test
* Added common code into fileutils and strutils
* Enable hacking H402 test
* Enable hacking H403 test
* Enable hacking H201 test
* Add 't', 'y', and `strict` to `bool_from_string`
* Handle ints passed to `boolean_from_string`
* Removes leading zeros on integers in test_timeutils
* Convert unicode strings for python3 portability
* Do not import openstack.common.log in strutils
* Improve Python 3.x compatibility
* Replaces standard logging with common logging
* Removes unused imports in the tests module
* Fix Copyright Headers - Rename LLC to Foundation
* support ISO 8601 micro-second precision
* Decode / Encode string utils for openstack
* timeutils: considers that now is soon
* Replace direct use of testtools BaseTestCase
* Use testtools as test base class
* Import timeutils.is_soon from keystoneclient
* UTC ISO8601 from timestamp
* Implement importutils.try_import
* Use basestring instead of str for type check
* Make time comparison functions accept strings
* Fix timezone handling in timeutils tests
* Rename utils.py to strutils.py
* Provide i18n to those messages without _()
* Make project pyflakes clean
* Account for tasks duration in LoopingCall delay
* Convenience wrapper for datetime.timedelta.total_seconds()
* Added is_newer_than function
* Extracted parse_host_port into network_utils
* Normalize_time() always return naive object
* Use pep8 v1.3.3
* Don't trap then re-raise ImportError
* Fix spelling typos
* Support for marshalling datetime while preserving microseconds
* Remove unused imports
* fix bug lp:1019348,update openstack-common to support pep8 1.3
* Use strtime() in to_primitive() for datetime objs
* Improve exception from importutils.import_class()
* Update common code to support pep 1.3. bug 1014216
* add import_object_ns function
* add more realistic unit tests for importutils
* Fix utcnow_ts to return UTC timestamp
* Add nova time util functions to timeutils
* Replace datetime.utcnow with timeutils.utcnow
* Remove common.exception from common.importutils
* Add save_and_reraise_exception()
* Update exception from importutils.import_class()
* Change behavior in utils.import_object()
* Create openstack.common.timeutils
* Initial skeleton project
