Be sure to send the content length

- Bug Fix: Use the correct headers when uploading a block
- Enhancement: log the function being called around the request/response data (optional, but good to do)
Enhancement - Splitter API

- Added convenience function to deuceclient.api.Block in order to easily generate the block ids in a re-usable manner
- Added base class for the API for splitting data up into numerous blocks
- Provide one implementation of the base class that splits data into uniformly sized chunks except for the last portion of data which may be up to that size
- Added tests
--- Added tests for the __log_response_data and __log_request_data to ensure full test coverage
--- Added test for the re-usuable block id generator
--- Added tests for the new data splitter functionality
------ Added re-usuable function for generating a reader stream
------ Note: 3 tests (those related to generating multiple blocks and storing in deuceclient.api.Blocks) still fail; trying to figure out why
Bug Fix - input_io validation/enable use of temp files

- at least tempfile.NamedTemporaryFile did not have 'read' as a listed attribute
--- changed method of detection from listing the attributes to trying to use the read function to read nothing
--- changed the make_reader() to be able to support either the memory buffer (io.BytesIO) or a named temporary file
--- changed tests to use a temp file in one case so as to exercise the read function detection logic
- Note: Using the temporary file (a read File-like Object) did not resolve the issue with the three tests, they still fail; keeping this as it provides additional kinds of testing and it did uncover a bug that would have cropped up later if someone tried to use a temp file
Documentation

- Adding documentation regarding the logic of why something is done the way it is
Bug Fixes

- Bug Fix: Null byte array ends up matching the same block-id so it keeps getting overwritten in the tests; might need to use case that one too
- Simplification: Instead of trying to use the 'read' function, see if it's in the attribute list using getattr(). dir() is not guaranateed to provide it.
- Simplification: shell should use the make_id provided by deuceclient.api.Block
Merge branch 'enhancement_test_validation' into bugfix_upload_content_length

Conflicts:
	deuceclient/tests/test_api_block.py
Bug Fix - splitting a file reliably

- The previous version would split a file and successfully de-dup it using the api.Blocks storage. However, for the splitter this is incorrect. We don't want to de-dup it here - that is for the api.File to do. We only care about getting the data out of the input source.
--- Fixes by using a list ([]) instead of a dictionary (api.Blocks) to store the blocks when returning multiples from the splitter
--- Fixes by adding the offset with the Block and returning it as a tuple when getting a single block
--- Adds dependency on the input source having 'tell' support; kind of required any way just not explicitly yet
- Added support for testing with null and non-null data buffers so that we can determine the differences that the two should or should not have
--- For the file splitter there should be no difference
--- Added another series of tests to show that there is no difference between using a null and non-null data buffer
Cleanup

- Removed unused import
Enhancement - Validation

- Moved some validation checks from in-code to using stoplight on the parameters
Merge branch 'master' into bugfix_upload_content_length
Hooking up the File Splitter API

- Enhancement: len() on the File object to get the length of the file; it is not guaranteed to have no gaps and no overlaps
- Enhancement: internal tracking of the maximum offset, redimentary for now
- Enhancement: add a block call instead of having to use use the blocks property and add it directly; this provides de-dup capabilities
- Enhancement: added use of the file splitter api to the file object to load blocks from a data source
- Enhancement: More validation checks
- Bug Fix: some typos
- Bug Fix: assign block test failed to assign use different offsets in the happy case resulting in one block being assigned instead of the true number of blocks being assigned
Enhancement - hook ups

- Adds msgpack-python dependency in requirements.txt
- Removes functionality requiring the block to be inserted into the vault with data in order for it to be assigned to a file
- Adds a function to easily add new files to a vault object
- Adds function to upload multiple blocks using the msgpack interface for deuce
--- Adds appropriate tests
- Adds function to finalize a file
--- tests are still TBD
Testing File Finalization

- Added another contraint to File Finalization - that the file explicitly be part of the Vault
- Added tests for file finalization
- Cleaned up file creation by moving the client to be part of the self object and created as part of setUp()
Refactor - client tests

- Refactored client tests to create the client object in setUp() instead of in each function
Bug Fix

- Fixed a couple tests that were broken due to changes while getting the shell to work
Enhancements

- better isinstance() check for list object
- better assertion types used
Merge branch 'bugfix_upload_content_length' into enhancement_file_upload
Enhancement - better list instance testing (cont'd)
Merge branch 'bugfix_upload_content_length' into enhancement_file_upload
Merge pull request #27 from BenjamenMeyer/bugfix_upload_content_length

Bug Fix (upload content length) and Enhancement (File Splitting)