# RCSB_UTILS_IO HISTORY

25-Aug-2018  - Split off from py-rcsb_db
26-Aug-2018  - V0.11 Tweak testing configuration
 6-Oct-2018  - V0.12 Add convenience methods to IoUtils()
10-Oct-2018  - V0.12 Change default encoding for list files to utf-8
12-Oct-2018  - V0.13 Adjustments for Py27 encoding compatibility
13-Oct-2018  - V0.14 Simplify list serialization to avoid Py2-3 encoding differences
13-Oct-2018  - V0.15 Overhaul Py2-3 encoding for lists.
25-Oct-2018  - V0.16 Update testing environment and dependencies
26-Oct-2018  - V0.17 Add additional JSON encodings for YAML mapping data types
25-Nov-2018  - V0.18 Add support for FASTA format
 1-Dec-2018  - V0.19 Add support for CSV and related delimited row formats
11-Dec-2018  - V0.20 Add comment filtering on input for CSV files
 6-Feb-2019  - V0.21 Add support for gzip compression as part of serializing mmCIF files,
                     add vrpt-xml-to-cif option and supporting method __deserializeVrptToCif()
 6-Mar-2019  - V0.22 Update installation dependencies and documentation
 9-Mar-2019  - V0.23 Add implementations for stubbed out remote access.
 9-Mar-2019  - V0.24 Add URL locator test and import fix to resolve PY27 compatibility issue.
10-Mar-2019  - V0.25 Add FileUtils.exists() method
16-Mar-2019  - V0.26 Add class UrlRequestUtil() with general wrappers for common get and post
                     methods and associated tests.
17-Mar-2019  - V0.27 Return HTTP response codes in UrlRequestUtil() methods.
24-Mar-2019  - V0.28 Suppress error message on missing validation report file.
25-Mar-2019  - V0.29 Expose comment processing for csv/tdd files as keyword argument
 2-Apr-2019  - V0.30 Add comment option and compression handling to __deserializeList()
19-Jun-2019  - V0.31 Address linting issues and and adjustments for multi-type return values.
11-Jul-2019  - V0.32 add explicit py2 safe file decompression to avoid encoding problems
25-Jul-2019  - V0.33 Try to improve retention of ordering for json load
 9-Aug-2019  - V0.34 Added retry for all url or service requests
10-Aug-2019  - V0.35 Incorporate ElementTree parser for XML deserializer
11-Aug-2019  - V0.36 Migrate compress/uncompreess and toAscii methods
                     from IoUtil to FileUtil. In FileUtil, add __extractZipMember() method.
                     Add retry support for __fetchUrlx(). Replace urlibx version of __fetchUrlx
                     with a version that depends on  requests module to better support
                     redirection and authentication.  Add further unit tests for FileUtil.
12-Aug-2019  - V0.37 Add modules CryptUtils and testCryptUtils.
13-Aug-2019  - V0.38 Add support for multipart serialization/deserialization
14-Aug-2019  - V0.39 Add methods for making working directories
29-Aug-2019  - V0.40 Fix py27 compatibility issues
 4-Sep-2019  - V0.41 Add common json numpy type encodings
18-Sep-2019  - V0.42 Add IoUtil() method deserializeCsvIter()
18-Sep-2019  - V0.43 remove return in the generator method for Py27
18-Sep-2019  - V0.44 Adjust testing timeout.
 7-Oct-2019  - V0.45 Adjust error handling in FileUtil()
27-Oct-2019  - V0.46 Add multiprocessor timeout decorator
29-Oct-2019  - V0.47 Add signal timeout decorator
20-Nov-2019  - V0.48 Add support for user supplied alternative delimiters, upgrade to py38
16-Dec-2019  - V0.49 Expand the exceptions for retry() on urlrequest get and post
25-Jan-2020  - V0.50 Add module ExecUtils() subprocess execution wrapper.
29-Jan-2020  - V0.51 Add encoding options for json serializer and xml deserializer
 1-Feb-2020  - V0.52 Add utility function getObjSize()
 3-Feb-2020  - V0.53 Update dependencies
10-Feb-2020  - V0.54 Add module TimeUtil()
17-Feb-2020  - V0.55 Add remove methods.
19-Feb-2020  - V0.56 Adjust failover processing for url fetches.
14-Mar-2020  - V0.57 Change policy to always precheck and create missing paths.
18-Apr-2020  - V0.58 Add feature to catch specified HTTP error codes in UrlRequestUtil()
18-Apr-2020  - V0.59 Adjustments for Py27 compatibility
18-Apr-2020  - V0.60 Further adjustments for Py27 compatibility
24-Apr-2020  - V0.61 Add return type processing in UrlRequestUtil() and undecorated method entry points.
 8-May-2020  - V0.62 Add default comment parser as a fallback for the FastaUtil()
13-May-2020  - V0.63 Update test cases for py 2.7.18.
26-May-2020  - V0.64 Adding timeout and user agent for url fetchs
28-May-2020  - V0.65 Add alternative URL fetch methods using requests module
 4-Jun-2020  - V0.66 Add public bundle and unbundle tar file methods in FileUtil()
 5-Jun-2020  - V0.67 Add sftp client class SftpUtil() and tests.
 9-Jun-2020  - V0.68 Documentation updates and some additional pre-checks for path existence prior to copy operations.
19-Jun-2020  - V0.69 Exposing comment parsing methods in FastaUtil().
20-Jul-2020  - V0.70 Expose request timeout as a keyword argument for unwrapped requests.
20-Jul-2020  - V0.71 Further adjustments in logging and error handling
21-Jul-2020  - V0.72 Add module StashUtil() to simplify backup of and recovery of bundled directories of data
                     from remote storage resources.
22-Jul-2020  - V0.73 Adjust api nomenclature
22-Jul-2020  - V0.74 Create destination directory for tarfile unbundling
 1-Aug-2020  - V0.75 Add https protocol StashUtil.fetchBundle()
24-Aug-2020  - V0.76 Add module ProcessStatusUtil() and related tests.
19-Oct-2020  - V0.77 Adjust troubleshooting logging
26-Oct-2020  - V0.78 down version numpy to 1.18.0 to solve Py3.9 macos issue
26-Oct-2020  - V0.79 handle Py27 numpy limit in requirements
 2-Nov-2020  - V0.80 add gzip support to json deserialization method.
 9-Nov-2020  - V0.81 add zip unbundle method to FileUtil()
 9-Nov-2020  - V0.82 add stdin option in ExecUtil().run()
23-Nov-2020  - V0.83 add option to turn on SSL verification in requests() package
23-Nov-2020  - V0.84 add option to restore SSL3 ciphers to urlopen connections
24-Nov-2020  - V0.85 disable uniprot tests for now until cert/handshake issues to work with Ubuntu 20.20
 1-Dec-2020  - V0.86 add tagged Fasta comment style and option to synthesize fasta comments
 1-Dec-2020  - V0.87 adjust documentation and upversion
 1-Dec-2020  - V0.88 update dependencies and pipeline
 1-Dec-2020  - V0.89 further output options for fasta files
 1-Dec-2020  - V0.90 Cast to string all components of fasta comment lines
 5-Dec-2020  - V0.91 Wrapped requests.Session() in a context manager.
 7-Dec-2020  - V0.92 Update diagnostics logging in ExecUtils()
13-Dec-2020  - V0.93 Add runShell() method to ExecUtils()
14-Dec-2020  - V0.94 Add option to suppress stderr output in ExecUtils()
28-Dec-2020  - V0.95 Catch empty directory in mkdirForFile()
20-Jan-2021  - V0.96 Adding IndexUtils() as a potentially temporary placement for this module.
24-Jan-2021  - V0.97 Update error logging in ExecUtils(), add sort() method to IndexBase()
29-Jan-2021  - V0.98 Update numpy/mmcif dependencies
29-Jan-2021  - V0.99 Documentation and installation adjustments
26-Feb-2021  - V1.00 Change pickle.HIGHEST_PROTOCOL to pickle.DEFAULT_PROTOCOL
10-Mar-2021  - V1.01 Add noRetry argument to FileUtil.get()
10-May-2021  - V1.12 Update FASTA parser in FastaUtil()
11-Jun-2021  - V1.13 Add StashableBase() module
14-Jun-2021  - V1.14 Add remotePrefix support to backup/restore methods in StashableBase()
19-Jul-2021  - V1.15 Add GitUtil() module and associated tests, add git support in StashableBase()
27-Jul-2021  - V1.16 Adjust stash and git logging verbosity
 3-Aug-2021  - V1.17 Propagate the uncomment option properly to __processList() method in IoUtil()
 5-Aug-2021  - V1.18 Add FtpUtil() class to handle FTP server operations.
17-Aug-2021  - V1.19 Add sendContentType for postUnwrapped in UrlRequestUtil()
28-Aug-2021  - V1.20 Add minimum file size warning for mmCIF deserializer
 3-Sep-2021  - V1.21 Add FileLock() module
 8-Sep-2021  - V1.22 Add LogUtil() structured logging formatter module
16-Sep-2021  - V1.23 Add '.xz' file uncompression capability to FileUtil()
16-Sep-2021  - V1.24 Add support for zero copy http mmCIF access.
17-Sep-2021  - V1.25 Add explicit test for gzip compression in IoUtil.__deserializeXML()
17-Sep-2021  - V1.26 Fix protocol issue in remote FileUtil.exists() and size() methods
20-Sep-2021  - V1.27 Suppress logging of protocol errors in FileUtil()
21-Sep-2021  - V1.28 Protect against missing response headers in FileUtil.exists() and size() methods
21-Sep-2021  - V1.29 Add retry decorator for remote mmCIF deserialization method
27-Sep-2021  - V1.30 For Macos make the example multiprocessing test method a function (new serialization issues)
28-Sep-2021  - V1.31 Add diagnostic logging for FileUtil.exists/size methods for null locators
17-Oct-2021  - V1.32 Add local replace() method in FileUtil()
18-Mar-2022  - V1.33 Update replace() method in FileUtil() to return True when successful
28-Mar-2022  - V1.34 Resolve pylint issues
 6-Jun-2022  - V1.35 Resolve pylint issues in FastaUtil
 8-Sep-2022  - V1.36 Resolve pylint issues