+# Copyright (C) 2010 W. Trevor King <wking@drexel.edu>
+#
+# This file is part of Hooke.
+#
+# Hooke is free software: you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation, either
+# version 3 of the License, or (at your option) any later version.
+#
+# Hooke is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with Hooke. If not, see
+# <http://www.gnu.org/licenses/>.
+
"""The driver module provides :class:`Driver`\s for identifying and
reading data files.
to write your own to handle your lab's specific format.
"""
+import logging
+
from ..config import Setting
-from ..plugin import construct_graph, IsSubclass
+from ..util.pluggable import IsSubclass, construct_graph
+
DRIVER_MODULES = [
# ('csvdriver', True),
# ('hdf5', True),
-# ('hemingclamp', True),
-# ('jpk', True),
+ ('hemingway', True),
+ ('jpk', True),
# ('mcs', True),
# ('mfp1dexport', True),
-# ('mfp3d', True),
-# ('picoforce', True),
-# ('picoforcealt', True),
+ ('mfp3d', True),
+ ('picoforce', True),
('tutorial', True),
+ ('wtk', True),
]
"""List of driver modules and whether they should be included by
default. TODO: autodiscovery
"""
-class Driver(object):
+class Driver (object):
"""Base class for file format drivers.
- :attr:`name` identifies your driver, and should match the module
+ :attr:`name` identifies your driver and should match the module
name.
"""
def __init__(self, name):
"""
return False
- def read(self, path):
+ def read(self, path, info=None):
"""Read data from `path` and return a
- (:class:`hooke.curve.Data`, `info`) tuple.
+ ([:class:`hooke.curve.Data`, ...], `info`) tuple.
+
+ The input `info` :class:`dict` may contain attributes read
+ from the :class:`~hooke.playlist.FilePlaylist`.
The `info` :class:`dict` must contain values for the keys:
'filetype' and 'experiment'. See :class:`hooke.curve.Curve`
"""
raise NotImplementedError
+ def logger(self):
+ return logging.getLogger('hooke')
+
# Construct driver dependency graph and load default drivers.
DRIVER_GRAPH = construct_graph(