File: csv_source_factory.py

package info (click to toggle)
mayavi2 4.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 21,892 kB
  • sloc: python: 49,447; javascript: 32,885; makefile: 129; fortran: 60
file content (57 lines) | stat: -rw-r--r-- 1,701 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
"""
Factory used by mayavi to import csv-like files into datasets.
"""

# Author: Gael Varoquaux <gael.varoquaux@normalesup.org>
# Copyright (c) 2008, Enthought, Inc.
# License: BSD Style.

from traits.api import HasTraits, Callable

from mayavi.tools.data_wizards.data_source_wizard import \
        DataSourceWizardView
from mayavi.tools.data_wizards.csv_loader import \
        CSVLoader, CSVLoaderController


class CallbackCSVLoader(CSVLoaderController):
    """ Simple handler for a TraitsUI view to call a given callback on
        exit.
    """

    # A callable called when the TraitsUI view is closed. The instance
    # that the view was editing is passed to this callable.
    callback = Callable()

    def closed(self, info, is_ok):
        print("CallbackHander")
        if is_ok:
            self.callback(self.model)


class CSVSourceFactory(HasTraits):
    """ Functor to load a CSV-like data from a file.
    """

    def csv_loaded_callback(self, object):
        """
        """
        self.data_source_wizard = DataSourceWizardView(
                data_sources=self.csv_loader.data_dict)
        self.data_source_wizard.edit_traits()

    def __call__(self, fname):
        """ Pops up the dialogs required for the import of the
            CSV to happen.
        """
        self.csv_loader = CSVLoader(filename=fname)
        self.csv_loader.guess_defaults()
        controller = CallbackCSVLoader(model=self.csv_loader,
                        callback=self.csv_loaded_callback)
        controller.edit_traits()

if __name__ == '__main__':
    from pyface.api import GUI
    source_factory = CSVSourceFactory()
    source_factory('mydata.csv')
    GUI().start_event_loop()