File locking implemented in File.
File locking implemented in File.

The machinery for shared and exclusive locks is now properly implemented
in the File class, which serves as the base class for all other File
objects. Read and write methods will need to be implemented separately
in ContainerFile and DataFile, since the first uses PyTables and the
second uses pandas' PyTables interface. The specifics of each will
differ.

After much searching around and hammering at the problem of file
locking, the best solution to ensure consistent views of the data
structures on disk is to open and close file descriptors on demand. This
is non-ideal from a performance perspective, but it is the ONLY way
(after testing alternatives, including flushing) to ensure that a given
instance sees the actual version of the file on disk. The upshot to this
is that it makes applying shared and exclusive locks rather easy, since
we simply have to wrap all our own getters and setters with functions
that apply the appropriate lock and read/write the file out.

dotsdl/datreant,datreant/datreant.core,andreabedini/datreant,datreant/datreant.core,datreant/datreant,datreant/datreant,datreant/datreant.data