Changelog
=========

v0.8.1 (2018-09-27)
-------------------
- [#140] Remove randomization from password test [Alan King]
- [#139] Use uppercase queries in tests [Alan King]
- [#137] Handle filenames with ampersands [Alan King]
- [#126] Add size attribute to iRODSReplica [Alan King]

v0.8.0 (2018-05-03)
-------------------
- Add rescName and replNum awareness. [Hao Xu]
- Document put() method in README.rst. [Terrell Russell]
- Add support for specifying resource hierarchy. [Hao Xu]
- Add modDataObjMeta. [Hao Xu]
- Use socket.recv_into() to speed up file download. [Pierre Gay]
- Lazy load resource children. [Antoine de Torcy]
- Test cleanup. [Antoine de Torcy]
- Add recursive collection creation support, plus test. [Robert Davey]
- Make query instances iterable. [Antoine de Torcy]
- Update package information. [Antoine de Torcy]
- Add version attribute to icat columns. [Antoine de Torcy]
- Don't enforce DB schema in data object constructor. [Antoine de Torcy]
- Add D_RESC_ID to data object model. [Bob Belnap]
- SSL context from iRODSAccount instance attributes. [Antoine de Torcy]
- Avoid calling data object create on replication node. [Antoine de Torcy]
- Pass optional CA file to SSL context. [Antoine de Torcy]
- Graceful SSL shutdown. [Antoine de Torcy]
- Set open flags and IO buffer size in DataObjectManager. [Antoine de Torcy]
- Force open flags to client os independent values. [Pierre Gay]
- Handle Winerror 10045. [Pierre Gay]
- Python 2/3 compability. [Jonathan de Bruin]


v0.7.0 (2017-12-15)
-------------------
- Dynamic instance method definition for Python2/3. [Antoine de Torcy]
- Filter by collection path. [Antoine de Torcy]
- Add truncate flag. [Antoine de Torcy]
- Add update replica keyword. [Antoine de Torcy]
- Client-side support for ALL_KW on put. [Antoine de Torcy]
- Add server version to session properties. [Antoine de Torcy]
- Pass object IO options in unpacked format. [Antoine de Torcy]
- Refactor tests and session config. [Antoine de Torcy]
- First pass at SSL support. [Antoine de Torcy]
- Use reentrant lock in connection pool. [Antoine de Torcy]
- Allow for cases with CS_NEG_DONT_CARE. [Antoine de Torcy]
- First pass at client-server negotiation. [Antoine de Torcy]
- Simplify session/account initialization. [Antoine de Torcy]
- Expect multiple DNs per user. [Antoine de Torcy]
- Use default resource host/path strings. [Antoine de Torcy]
- Honor default resource setting. [Antoine de Torcy]
- Add placeholder for formatting arguments. [Antoine de Torcy]
- Add function get_html_string in results.py. [KERVELLEC Joseph]
- Fix assertions. [Antoine de Torcy]
- Test registration with checksum. [Antoine de Torcy]
- Add admin option to AccessManager.set() [Antoine de Torcy]
- Add file/dir registration. [Antoine de Torcy]
- Remove call to sys.exc_clear() [Antoine de Torcy]
- Force flag support on get. [Antoine de Torcy]
- Fix intermittent encoding error. [Antoine de Torcy]
- Update iRODSSession.configure() [Antoine de Torcy]
- Set default iRODS authentication scheme to native. [Lazlo Westerhof]
- Use the same naming as iRODS environment variable
  irods_authentication_scheme. [Lazlo Westerhof]
- Add connection timeout. [Antoine de Torcy]
- Extend the query condition interface. [Antoine de Torcy]
- Better handling of byte buffers. [Antoine de Torcy]
- Python 3 fix. [Antoine de Torcy]
- Set OPR_TYPE to 1 on put. [Antoine de Torcy]
- Set default empty username in iRODSAccess. [Antoine de Torcy]
- Add ability to set user passwords. [Antoine de Torcy]
- First pass at iRODS ticket support - ticket generation - ticket based
  access. [Antoine de Torcy]
- Add dependencies to setup.py. [Antoine de Torcy]
- Add object put/get test. [Antoine de Torcy]
- Unpack error messages. [Antoine de Torcy]
- Add CAT_UNKNOWN_SPECIFIC_QUERY exception. [Antoine de Torcy]
- Commits for the english language, which apparently I'm qualified in..
  [John Constable]
- Document the use of the SpecificQuery class and irods_environment.json
  reading functionality. [John Constable]
- Adds exists() to data_object manager to mirror collection manager.
  [Alex Lemann]
- Remove unused exceptions. [Antoine de Torcy]
- Fix exception hierarchy. [Antoine de Torcy]


v0.6.0 (2017-05-23)
-------------------
- Patch for GSI. [pdonorio]
- Add keywords for atomic put. [Antoine de Torcy]
- Raise recv error. Don't call exit() [Alex Lemann]
- Allows numThreads to be configured in session. [Alex Lemann]
- Python 3 fix. [Antoine de Torcy]
- Encode unicode when packing. [Antoine de Torcy]
- Optional use of icommands environment files. [Antoine de Torcy]
- Support for user certificate management. [Antoine de Torcy]
- Add oprType to data object open options. [Antoine de Torcy]
- Unit tests. [Antoine de Torcy]
- Set OprType for data object copy. [Antoine de Torcy]
- Adding support for data object copy. [cmart]
- Add replica number to iRODSReplica. [Antoine de Torcy]
- Add unit test to list queries. [Antoine de Torcy]
- SQL query support. [Antoine de Torcy]
- Add replica example to README. [Antoine de Torcy]
- Update test. [Antoine de Torcy]
- Update README.md. [Antoine de Torcy]
- Move iRODSDataObject.open() code to manager. [Antoine de Torcy]
- Support for optional keywords on open. [Antoine de Torcy]
- Python 3.4+ support. [Paolo D]
- Update test. [Antoine de Torcy]
- Change wrong irods exception. [Simon Artzet]
- Added password obfuscation/de-obfuscation utilities from iRODS main.
  [Zoey Greer]
- Cleanup. [Antoine de Torcy]
- Lazy import gssapi. [Antoine de Torcy]
- Cleanup. [Antoine de Torcy]
- Refactor tests. [Antoine de Torcy]
- Fixing problems for unittests. [pdonorio]
- Add tests for GSI authentication. [pdonorio]
- Add GSI authentication to Python client. [pdonorio]
- Remove logging and update version. [Antoine de Torcy]
- Fix ExecCmdOut_PI unpacking. [Antoine de Torcy]
- Update README.md. [Antoine de Torcy]
- Support for MsParam_PI packing/unpacking. [Antoine de Torcy]
- Update README.md. [Antoine de Torcy]
- Use comma as delimiter. [Antoine de Torcy]
- First pass at rule execution support. [Antoine de Torcy]
- Support for resource context management. [Antoine de Torcy]
- Fix resource model. [Antoine de Torcy]
- First pass at support for resource hierarchies. [Antoine de Torcy]
- Handle missing socket.MSG_WAITALL flag. [Antoine de Torcy]
- Example of query with 'like' condition. [Antoine de Torcy]
- Check for empty values before sending add metadata request. [Antoine
  de Torcy]
- PEP8 compliance. [Antoine de Torcy]
- Unit test. [Antoine de Torcy]
- First pass at data object replication. [Antoine de Torcy]


v0.5.0 (2016-08-15)
-------------------
- Update package files. [Antoine de Torcy]
- Add set operation for metadata. [Illyoung Choi]
- Add truncate function to data_object class and test case for it.
  [Illyoung Choi]
- Support truncate operation. [Illyoung Choi]
- Test for PEP based checksum computation. [Antoine de Torcy]
- Add jenkins test status. [Antoine de Torcy]
- Add tests for connection pooling. [Matthew R Hanlon]
- NetworkException on disconnect should still release the connection.
  [Matthew R Hanlon]
- Remove idle connections from pool on release. [Matthew R Hanlon]
- Catch formatting exceptions. [Antoine de Torcy]
- Do not rely on socket.MSG_WAITALL flag since it doesn't guarantee a
  message will be in exact requested len when interrupt occurs.
  [Illyoung Choi]
- Consecutive open/read tests. [Antoine de Torcy]
- Use generator to get subcollections and objects in collection manager.
  [Antoine de Torcy]
- Typo. [Antoine de Torcy]
- Fix aggregation example in README. [Wataru Takase]
- Add aggregation feature for query. [Wataru Takase]
- Update setup and README. [Antoine de Torcy]
- Collection ACL + test. [Antoine de Torcy]
- Cleanup. [Antoine de Torcy]
- First pass at ACL management. [Antoine de Torcy]
- Fix naming. [Antoine de Torcy]
- Update test group size. [Antoine de Torcy]
- First pass at user group management. [Antoine de Torcy]
- Dropping unofficial support for Python 2.6. [Antoine de Torcy]
- Remove leftover resource group reference. [Antoine de Torcy]
- Add force flag to DataObjectManager.unlink() + test. [Antoine de
  Torcy]
- Typo. [Terrell Russell]
- Update README. [Antoine de Torcy]
- Make resource management backward compatible. [Antoine de Torcy]
- Strip gen queries going to older servers. [Antoine de Torcy]
- Update README. [Antoine de Torcy]
- Support for moving objects and collections. [Antoine de Torcy]
- Better support for unicode strings. [adetorcy]
- Updated README.md. [Antoine de Torcy]
- Test cleanup. [Antoine de Torcy]
- Added responses to collOprStat calls from the server in the collection
  manager. [Antoine de Torcy]
- Added generator method to Query. [Antoine de Torcy]
- Updated DataObject model and tests. [Antoine de Torcy]
- Patch by @lewisct. [Antoine de Torcy]
- More resource mangement + tests. [Antoine de Torcy]
- Added optional parameters to DataObjectManager.create() [Antoine de
  Torcy]
- Added resource management support. [Antoine de Torcy]
- Updated resource model (with context, parent, children, etc...)
  [Antoine de Torcy]
- First stab at user modification and resource management support.
  [Antoine de Torcy]
- New lines. [Antoine de Torcy]
- Support for user creation and deletion + tests. [Antoine de Torcy]
- Fixed Query._clone() [Antoine de Torcy]
- Sort results in metadata test to avoid mixup in assertion. [Antoine de
  Torcy]
- Removed resource groups and resc_info for 4.1. [Antoine de Torcy]
- Typo. [Antoine de Torcy]
- Update version. [J. Matt Peterson]
- Test results update. [Antoine de Torcy]
- Test results update. [Antoine de Torcy]
- Use test credentials from config module. [Antoine de Torcy]
- Comments. [Antoine de Torcy]
- Updated API and packing instructions for FileCloseRequest() [Antoine
  de Torcy]
- Update to new API for collection creation. [Matthew Turk]
- Update setup.py. [Low Kian Seong]
- Change for initial pypi release.        modified:   .gitignore  new
  file:   AUTHORS     new file:   CHANGES     new file:   LICENSE
  new file:   MANIFEST.in         modified:   setup.py. [J. Matt
  Peterson]
- Upped to version 0.3. [Chris LaRose]
- Destroying connections that encounter broken pipes. This makes
  connections more resiliant to connection resets by the iRODS host.
  [Chris LaRose]
- Upped version number. [Chris La Rose]
- Added iRODSReplica class. [Chris La Rose]
- Getting data_objects of a collection where there exists replicas no
  longer returns duplicate data_objects. [Chris La Rose]
- DataObjectManager.get now no longer fails when trying to get a data
  object that is replicated. DataObject now stores a list of four-tuples
  representing its replicas. [Chris La Rose]
- Added repr method for column. [Chris La Rose]
- Corrected typo in exception. [Chris La Rose]
- Thread safe connection pool. [Falmarri]
- Replaced instances of logging.{debug, info, warn, error} with
  logging.getLogger(__name__).{debug, info, warn, error} for better
  logging support. [Christopher La Rose]
- Fixed closing files. [Chris La Rose]
- Reimplemented buffered reading and writing with new io module. [Chris
  La Rose]
- Fix bug where port keyword didn't work if it was a string. [J. Matt
  Peterson]
- Fixed null comparison. [Christopher La Rose]
- Readlines is a generator. [Falmarri]
- Implmented iRODSDataObjectFile.[readline(), readlines()] [Chris
  LaRose]
- Changed project name in setup. [Chris LaRose]
- Rename from pycommands to python-irodsclient. [JMatt Peterson]
- Consolidate tests. [Michael Gatto]
- Update TODOs. [Chris LaRose]
- Updated install link in readme. Updated TODOs. [Chris LaRose]
- Major test restructuring. [Michael Gatto]
- Minor change. [Michael Gatto]
- Run all tests at once, if desired. [Michael Gatto]
- Added license. [Chris La Rose]
- Added convenience methods for removing data objects and collections.
  Renamed CollectionManager.[delete=>remove] [Chris La Rose]
- Removed useless file. [Chris La Rose]
- Updated version to 0.1. [Steve Gregory]
- Update README.md with proxy instructions. [Chris LaRose]
- Remove double import. [Michael Gatto]
- Update results. [Michael Gatto]
- Add heading for test results. [Michael Gatto]
- Rename to match naming convention of rest of tests in this package.
  [Michael Gatto]
- Moved tests to own package within the irods package. [Michael Gatto]
- Placed client_user and client_zone properties onto the iRODSAccount
  class. [Chris La Rose]
- Ignore commonly-produced cruft files. [Michael Gatto]
- Added walk() implementation to collection. [Steve Gregory]
- StatupPack construction works for proxying a user. [Chris La Rose]
- Added ability to initialize session with proxy_user and proxy_zone
  options. [Chris La Rose]
- Absolute imports in all the modules! [Chris La Rose]
- Resource manager files all now use absolute imports. [Christopher La
  Rose]
- Moved resource managers into self contained module. [Chris LaRose]
- Fixed prettytable requirement in setup.py. [Chris LaRose]
- Formatting readme. [Chris La Rose]
- Added note about python 2.7 requirement. [Chris La Rose]
- Added missing import statement. [Chris La Rose]
- Queries now support order_by. [Chris La Rose]
- Removed logging. [Chris La Rose]
- Implemented ordering on queries. [Chris La Rose]
- Added print statement for results in readme. [Chris La Rose]
- Implemented query._clone() [Chris La Rose]
- Added query offsets. [Chris La Rose]
- Added ability to remove collections. [Chris La Rose]
- Added ability to create new collections. [Chris La Rose]
- Added pretttable output to readme. [Chris La Rose]
- Result objects will now print a prettytable. [Chris La Rose]
- Fixed setup script. [Chris La Rose]
- Added prettytable as a dependency. [Chris La Rose]
- Implemented Query.first() and Query.one() [Chris La Rose]
- Adding and removing metadata can now be performed with positional
  arguments instead of iRODSMeta objects. [Chris La Rose]
- Manager method renaming. [Chris La Rose]
- Cleaning up managers. [Chris La Rose]
- Fixed references in managers to session. [Chris La Rose]
- Added appropriate imports. [Chris La Rose]
- Made a bunch of manager classes.  Nothing likely works. [Chris La
  Rose]
- Removed logging statements. [Chris La Rose]
- Added note about gen queries in readme. [Chris La Rose]
- Fixed file create, metadata add. [Chris La Rose]
- Added note about file iteration in readme. [Chris La Rose]
- Files are now iterable. [Chris La Rose]
- Fixed file seek. [Chris La Rose]
- Spelling mistakes. [Chris La Rose]
- Added collection message. [Chris La Rose]
- Added browse test. [Chris La Rose]
- Began to rename messages. [Chris La Rose]
- Basic connection pool now reusing connections. [Chris La Rose]
- Added option to data_object_file to close file descriptor after full
  read. [Chris La Rose]
- Release connections even after a failure to close a file. [Chris La
  Rose]
- Fixed type error when trying to read a file with no specified size.
  [Chris La Rose]
- Added checksum and timestamp attributes to data objects. [Chris La
  Rose]
- Failed collection request for a data object rasies
  DataObjectDoesNotExist. [Chris La Rose]
- Forced file operations to be performed on the same connection. [Chris
  La Rose]
- Added account, connection, and pool classes. [Chris La Rose]
- Added iRODSMeta.__dict__ [Chris La Rose]
- Unbroke collection metadata. [Chris La Rose]
- Unbroke dataobject.read() [Chris La Rose]
- Renamed read_all to read_gen. [Chris La Rose]
- Corrected subcollection query. [Chris La Rose]
- Corrected dataobject.read_all() [Chris La Rose]
- Changed visibility of iRODSDataObject.read_all() to public. [Chris La
  Rose]
- Added DoesNotExist exceptions. [Chris La Rose]
- Corrected data object path. [Chris La Rose]
- Collection and data object both now have normalized name and path
  attributes. [Chris La Rose]
- Added installation instructions. [Chris La Rose]
- Fixed ability to initialize session without account parameters. [Chris
  La Rose]
- Added message module to setup.py. [Chris La Rose]
- Added session.configure. [Chris La Rose]
- Replaced py_modules with packages in setup. [Chris La Rose]
- More setup. [Chris La Rose]
- More setup. [Chris La Rose]
- Correct invalid module in setup.py. [Chris La Rose]
- Added setup.py. [Chris La Rose]
- Update readme. [Chris La Rose]
- Updated readme. [Chris La Rose]
- Updated readme, fixed error when deleting meta with null units. [Chris
  La Rose]
- Fixed metadata for collections. [Chris La Rose]
- Update readme. [Chris La Rose]
- Closing file descriptors after creating new data objects. [Chris La
  Rose]
- Updated todos. [Chris La Rose]
- Corrected syntax mistakes in iRODSMetaCollection. [Chris La Rose]
- Null result sets return empty lists instead of raising exceptions.
  [Chris La Rose]
- Fixed runtime errors. [Chris La Rose]
- Added todo. [Chris La Rose]
- Added todos. [Chris La Rose]
- Added meta.iRODSMetaCollection. [Chris La Rose]
- Modified session metadata api to accept model classes. [Chris La Rose]
- Update README.md. [Chris LaRose]
- Added iRODSSession.{add_meta, remove_meta, copy_meta} [Chris La Rose]
- IRODSSession.get_meta now returns a list of type iRODSMeta. [Chris La
  Rose]
- Added ability to query metadata. [Chris La Rose]
- Updated todos. [Chris La Rose]
- Supporting ability to delete data objects. [Chris La Rose]
- Update README.md. [Chris LaRose]
- Formatted task list. [Chris La Rose]
- Added todo list to readme. [Chris La Rose]
- Updated readme with file creation. [Chris La Rose]
- Added iRODSSession.create_data_object. [Chris La Rose]
- Added default port to irods session. [Chris La Rose]
- Added ability to use with statement for irods file objects. [Chris La
  Rose]
- Added wait all flag on receiving sockets. [Chris La Rose]
- Changed read all size. [Chris La Rose]
- Added ability to read entire file. [Chris La Rose]
- Added ability to close files. [Chris La Rose]
- File seek support. [Chris La Rose]
- Now supporting writing to existing files. [Chris La Rose]
- Added cases for open flags. [Chris La Rose]
- Added default file read size. [Chris La Rose]
- Successfully reading file contents. [Chris La Rose]
- Sending data read message. [Chris La Rose]
- Removed unnecessary constants. [Chris La Rose]
- Changed api_numbers to dict. [Chris La Rose]
- Added magic numbers for api calls. [Chris La Rose]
- Added data object file class. [Chris La Rose]
- Received messages raise the appropriate error response. [Chris La
  Rose]
- Added all exceptions as classes. [Chris La Rose]
- Successfully opening file for reading. [Chris La Rose]
- Short readme addition for data objects. [Chris La Rose]
- Removed old messages file. [Chris La Rose]
- Result set str formatting. [Chris La Rose]
- Correctly forming result sets. [Chris La Rose]
- Correct representation of empty map messages. [Chris La Rose]
- Tests passing again. [Chris La Rose]
- Corrected construction of gen query inp messages. [Chris La Rose]
- Fixed login. [Chris La Rose]
- Added data obj inp. [Chris La Rose]
- Cleanup. [Chris La Rose]
- Changed unpacking convention to allow for arrays of submessages.
  [Chris La Rose]
- Added sql result test. [Chris La Rose]
- Finished gen query inp test. [Chris La Rose]
- Added test for gen query inp. [Chris La Rose]
- Added message init method for convenience. [Chris La Rose]
- Added test for key value pair. [Chris La Rose]
- Added test for inxivalpair. [Chris La Rose]
- Binary property now properly performs base64 encoding and decoding.
  [Chris La Rose]
- Added test for startuppack. [Chris La Rose]
- Added unit test file. [Chris La Rose]
- Renamed test. [Chris La Rose]
- Fixed array and submessage unpacking. [Chris La Rose]
- Added unpacking. [Chris La Rose]
- Fixed submessage property. [Chris La Rose]
- Fixed array property. [Chris La Rose]
- AuthResponseInp_PI proof of concept. [Chris La Rose]
- Added some messages. [Chris La Rose]
- Removed irrelevant _format property of Message classes. [Chris La
  Rose]
- Beginning to reimplement messages. [Chris La Rose]
- Moved old messages into tempory file. [Chris La Rose]
- Property.format is no longer static. [Chris La Rose]
- Redefined property packing for more flexibility. [Chris La Rose]
- Added message.pack method. [Chris La Rose]
- Added ordered properties. [Chris La Rose]
- Added DataObjInp message. [Chris La Rose]
- Removed session.collection_exists. [Chris La Rose]
- Added some exceptions. [Chris La Rose]
- Added syntax highlighting to readme. [Chris LaRose]
- Formatting headers of result set string representation. [Chris La
  Rose]
- Added missing fields to DataObject model. [Chris La Rose]
- Added collection.subcollections and collection.data_objects. [Chris La
  Rose]
- Added session.get_data_object. [Chris La Rose]
- Corrected formatting of datetime columns in queries. [Chris La Rose]
- Convert irods timestamsp to datetime.datetime objs. [Chris La Rose]
- Update README.md. [Chris LaRose]
- Reimplemented result sets, added session.get_collection. [Chris La
  Rose]
- Formatted result sets as a list of dictionaries. [Chris La Rose]
- Fixed 'not equal' operator for criteria. [Chris La Rose]
- Changed nameds of startup pack and auth response messages to match
  irods api. [Chris La Rose]
- Added ResultSet class with a __str__ method that prints a result set
  as a table SQL style. [Chris La Rose]
- Added Zone and Resource models. [Chris La Rose]
- Added iRODSException class. [Chris La Rose]
- Added query.first() placeholder. [Chris La Rose]
- Create README.md. [Chris LaRose]
- GenQueryInp constructor now accepts messages instead of strings.
  [Chris La Rose]
- Added GenQueryOut unapcking. [Chris La Rose]
- Changed column name on data object. [Chris La Rose]
- Added dataobject model. [Chris La Rose]
- Added GenQueOut message. [Chris La Rose]
- Added test for collection existance. [Chris La Rose]
- Added auth check for session.execute_query() [Chris La Rose]
- Special cases for keyval pair and inxival pair messages when length is
  0. [Chris La Rose]
- Added query.all(), session.execute_query() [Chris La Rose]
- Added general query message. [Chris La Rose]
- Added query._kw_message() [Chris La Rose]
- Added query._conds_message() [Chris La Rose]
- Added InxValPair. [Chris La Rose]
- Added query._select_message() [Chris La Rose]
- Added InxIvalPair message. [Chris La Rose]
- Completed keyword implementation. [Chris La Rose]
- Added QueryKey which is a superclass of Column and Keyword. [Chris La
  Rose]
- Added Query.filter. [Chris La Rose]
- Query object now maintains a dict of columns. [Chris La Rose]
- Added Query class. [Chris La Rose]
- Model metaclass now stores only a list of columns, not their
  associated attribute names. [Chris La Rose]
- Added model base class. [Chris La Rose]
- Added Criterion class. [Chris La Rose]
- Added columns.py. [Chris La Rose]
- Added magic numbers. [Chris La Rose]
- Added models. [Chris La Rose]
- Added comments for packing instructions for gen query. [Chris La Rose]
- IRODSMessage must be of type MainMessage now. [Chris La Rose]
- Added file.py. [Chris La Rose]
- Removed hardcoded username and password. [Chris La Rose]
- Added session destructor. [Chris La Rose]
- Added logging. [Chris La Rose]
- Added MAX_PASSWORD_LENGTH constant. [Chris La Rose]
- Added message.StartupMessage. [Chris La Rose]
- Added message and session classes. [Chris La Rose]
- Successfully disconnnecting. [Chris La Rose]
- Initial commit. [Chris La Rose]


