예제 #1
0
    def test_set_multiple_column_titles(self):
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }, {
            "key1_1": "val3_1",
            "key1_2": "val3_2",
            "key1_3": "val3_3"
        }, {
            "key1_1": "val4_1",
            "key1_2": "val4_2",
            "key1_3": "val4_3"
        }, {
            "key1_1": "val5_1",
            "key1_2": "val5_2",
            "key1_3": "val5_3"
        }]

        grid = DictionaryGrid(dicts)
        titles = {"key1_1": "KEY1", "key1_2": "KEY2", "key1_3": "KEY3"}
        grid.set_column_titles(titles)
        for c in grid.columns:
            self.assertTrue(grid.columns[c].get_title() in ("KEY1", "KEY2",
                                                            "KEY3"))
    def test_with_set_column_titles(self):
        dicts = [{"key1_1": "val1_1", "key1_2": "val1_2", "key1_3": "val1_3"},
                 {"key1_1": "val2_1", "key1_2": "val2_2", "key1_3": "val2_3"},
                 {"key1_1": "val3_1", "key1_2": "val3_2", "key1_3": "val3_3"},
                 {"key1_1": "val4_1", "key1_2": "val4_2", "key1_3": "val4_3"},
                 {"key1_1": "val5_1", "key1_2": "val5_2", "key1_3": "val5_3"}]

        grid = DictionaryGrid(dictionaries = dicts, keys=["key1_1","key1_2","key1_3"])
        titles = {"key1_1":"KEY1","key1_2":"KEY2","key1_3":"KEY3"}
        grid.set_column_titles(titles)
        grid_filter = GridFilter(grid)

        filter_row = grid_filter.rows[0]
        column_combo = filter_row.get_children()[0].get_children()[0]
        #make sure the correct titles are appearing
        itr = column_combo.get_model().get_iter(0)
        self.assertEqual(column_combo.get_model().get_value(itr,0),"KEY1")

        itr = column_combo.get_model().get_iter(1)
        self.assertEqual(column_combo.get_model().get_value(itr,0),"KEY2")

        itr = column_combo.get_model().get_iter(2)
        self.assertEqual(column_combo.get_model().get_value(itr,0),"KEY3")

        #make sure filtering still works
        filter_combo = filter_row.get_children()[1].get_children()[0].get_children()[0]
        filter_combo.set_active(1)
        entry = filter_row.get_children()[1].get_children()[0].get_children()[1]
        entry.set_text("val5_1")
        self.assertEqual(len(grid.get_model()),4)
예제 #3
0
    def test_use_custom_columns(self):
        """Ensure that type hins work so inferred types can be
        overridden and non-inferred type can be set.

        """

        keys = ["id", "price", "bool?", "foo"]
        hints = {
            "id": StringColumn,
            "price": IntegerColumn,
            "bool?": CurrencyColumn,
            "foo": CheckColumn
        }
        dicts = [{"price": 100, "id": "asdfas", "bool?": 10.01, "foo": True}]
        grid = DictionaryGrid(dicts, keys=keys, type_hints=hints)
        for c in grid.get_columns():
            key = c.key
            col_type = c.column_type
            if key == "id":
                self.assertEqual(col_type, gobject.TYPE_STRING)
            elif key == "price":
                self.assertEqual(col_type, gobject.TYPE_STRING)
            elif key == "bool?":
                self.assertEqual(col_type, gobject.TYPE_STRING)
            elif key == "foo":
                self.assertEqual(col_type, gobject.TYPE_INT)
            else:
                self.assertEqual("Extra key Found", False)
예제 #4
0
    def finish_initializing(self, builder):
        """Called when we're finished initializing.

        finish_initalizing should be called after parsing the ui definition
        and creating a OpenDialog object with it in order to
        finish initializing the start of the new OpenDialog
        instance.
        """
        # Get a reference to the builder and set up the signals.
        self.builder = builder
        self.ui = builder.get_ui(self)

        #get the jotty document names
        data_dir = GLib.get_user_data_dir()
        jotty_dir = os.path.join(data_dir, "jotty")
        filenames = os.listdir(jotty_dir)

        #put them into a grid
        dicts = [{
            'Name': x,
            'File': os.path.join(jotty_dir, x)
        } for x in filenames]
        self.grid = DictionaryGrid(dictionaries=dicts, keys=['Name'])

        #add grid to dialog
        self.grid.show()
        self.ui.box1.pack_end(self.grid, True, True, 0)
예제 #5
0
    def test_set_a_column_title(self):
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }, {
            "key1_1": "val3_1",
            "key1_2": "val3_2",
            "key1_3": "val3_3"
        }, {
            "key1_1": "val4_1",
            "key1_2": "val4_2",
            "key1_3": "val4_3"
        }, {
            "key1_1": "val5_1",
            "key1_2": "val5_2",
            "key1_3": "val5_3"
        }]

        grid = DictionaryGrid(dicts)
        grid.columns["key1_1"].set_title("KEY")
        for c in grid.get_columns():
            if c.key == "key1_1":
                self.assertEqual(c.get_title(), "KEY")
예제 #6
0
    def test_columns_property(self):
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }, {
            "key1_1": "val3_1",
            "key1_2": "val3_2",
            "key1_3": "val3_3"
        }, {
            "key1_1": "val4_1",
            "key1_2": "val4_2",
            "key1_3": "val4_3"
        }, {
            "key1_1": "val5_1",
            "key1_2": "val5_2",
            "key1_3": "val5_3"
        }]

        grid = DictionaryGrid(dicts)
        self.assertTrue("key1_1" in grid.columns)
        self.assertTrue("key1_2" in grid.columns)
        self.assertTrue("key1_3" in grid.columns)
예제 #7
0
    def test_extra_data_from_selected(self):
        """Ensure that keys starting with _ are not displayed,
        but the valuesa retrievable.

        """

        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "__extra": ["boo", "biz", "baz"]
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "__extra": self
        }]
        grid = DictionaryGrid(dicts)

        #make sure there are 2 columns
        self.assertEqual(len(grid.get_model()), 2)

        #ensure that none of the columns are named _extra
        cols = grid.get_columns()
        for c in cols:
            self.assertEqual(c.get_title().startswith("key"), True)

        #select the first row
        selection = grid.get_selection()
        selection.select_path((0, ))
        selected_dict = grid.selected_rows[0]
        self.assertEqual(selected_dict["__extra"], ["boo", "biz", "baz"])
 def test_create_a_grid(self):
     dicts = [{"key1_1": "val1_1", "key1_2": "val1_2", "key1_3": "val1_3"},
              {"key1_1": "val2_1", "key1_2": "val2_2", "key1_3": "val2_3"},
              {"key1_1": "val3_1", "key1_2": "val3_2", "key1_3": "val3_3"},
              {"key1_1": "val4_1", "key1_2": "val4_2", "key1_3": "val4_3"},
              {"key1_1": "val5_1", "key1_2": "val5_2", "key1_3": "val5_3"}]
     grid = DictionaryGrid(dicts)
     grid_filter = GridFilter(grid)
     self.assertEqual(len(grid.get_model()),5)
예제 #9
0
    def test_empty_construction(self):
        """Test a simple creating An AsynchTaskProgressBox 
        and then adding keys and dictionaries after creation

        """
        grid = DictionaryGrid()
        self.assertEqual((grid != None), True)
        grid.keys = ["key1", "key2"]
        self.assertEqual(grid.get_model().get_n_columns(), 3)
        grid.append_row({"key1": "val11", "key2": "val12"})
        self.assertEqual(len(grid.get_model()), 1)
예제 #10
0
    def test_copy_dictionaries(self):
        """Testcase for LP: #497664"""
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }]

        #build the CouchGrid
        grid1 = DictionaryGrid(dicts)
        # added two dicts, so length should be 2
        self.assertEqual(len(grid1.get_dictionaries_copy()), 2)

        #no dicts, so it should be 0
        grid2 = DictionaryGrid()
        self.assertEqual(len(grid2.get_dictionaries_copy()), 0)
예제 #11
0
    def test_mismatched_col_and_val_types(self):
        """Ensure robustness for strings passed in for non-str
        column types

        """

        keys = ["id", "price", "bool?"]
        dicts = [{"price": "100.00", "id": "50", "bool?": "Yes"}]
        grid = DictionaryGrid(dicts, keys)
        test_dict = grid.get_dictionaries_copy()[0]
        self.assertEqual(test_dict["id"], 50)
        self.assertEqual(test_dict["price"], 100.00)
        self.assertEqual(test_dict["bool?"], True)
예제 #12
0
    def finish_initializing(self, builder):
        """Called when we're finished initializing.

        finish_initalizing should be called after parsing the ui definition
        and creating a OpenDialog object with it in order to
        finish initializing the start of the new OpenDialog
        instance.
        """
        # Get a reference to the builder and set up the signals.
        self.builder = builder
        self.ui = builder.get_ui(self)

        self.supported_shape_formats = [".shp"]

        #let the user choose a path with the directory chooser
        response, path = prompts.choose_directory()

        #make certain the user said ok before working
        if response == Gtk.ResponseType.OK:
            #make one list of support formats
            formats = self.supported_shape_formats

            #make a list of the supported media files
            media_files = []
            #iterate through root directory
            for files in glob.glob(path + "/*.shp"):
                for format in formats:
                    if files.endswith(format):
                        #create a URI in a format gstreamer likes
                        file_uri = path
                        fileSplit = files.split(path + "/")
                        #add a dictionary to the list of media files
                        media_files.append({
                            "File": fileSplit[1],
                            "uri": file_uri,
                            "format": format
                        })

            #remove any children in scrolled window
            #for c in self.ui.scrolledwindow1.get_children():
            #   self.ui.scrolledwindow1.remove(c)

            #create the grid with list of dictionaries
            #only show the File column
            global media_grid
            media_grid = DictionaryGrid(media_files, keys=["File"])

            #show the grid, and add it to the scrolled window
            media_grid.show()
            self.ui.box1.pack_end(media_grid, True, True, 0)
 def test_filter_a_row(self):
     dicts = [{"key1_1": "val1_1", "key1_2": "val1_2", "key1_3": "val1_3"},
              {"key1_1": "val2_1", "key1_2": "val2_2", "key1_3": "val2_3"},
              {"key1_1": "val3_1", "key1_2": "val3_2", "key1_3": "val3_3"},
              {"key1_1": "val4_1", "key1_2": "val4_2", "key1_3": "val4_3"},
              {"key1_1": "val5_1", "key1_2": "val5_2", "key1_3": "val5_3"}]
     grid = DictionaryGrid(dicts)
     grid_filter = GridFilter(grid)
     filter_row = grid_filter.rows[0]
     filter_combo = filter_row.get_children()[1].get_children()[0].get_children()[0]
     filter_combo.set_active(1)
     entry = filter_row.get_children()[1].get_children()[0].get_children()[1]
     entry.set_text("val5_1")
     self.assertEqual(len(grid.get_model()),4)
예제 #14
0
    def test_dicts_with_different_keys(self):
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "__extra": ["boo", "biz", "baz"]
        }, {
            "key2_1": "val2_1",
            "key2_2": "val2_2",
            "__extra": self
        }]
        grid = DictionaryGrid(dicts)

        #make sure there are 5 columns
        self.assertEqual(grid.get_model().get_n_columns(), 5)
예제 #15
0
    def test_constructor_with_dicts(self):
        """test creating a grid with dictionaries in the contructor"""
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }]

        #build the CouchGrid
        grid = DictionaryGrid(dicts)
        self.assertEqual(grid.get_model().get_n_columns(), 4)
        self.assertEqual(len(grid.get_model()), 2)
예제 #16
0
    def test_remove_selected_rows(self):
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }, {
            "key1_1": "val3_1",
            "key1_2": "val3_2",
            "key1_3": "val3_3"
        }, {
            "key1_1": "val4_1",
            "key1_2": "val4_2",
            "key1_3": "val4_3"
        }, {
            "key1_1": "val5_1",
            "key1_2": "val5_2",
            "key1_3": "val5_3"
        }]

        grid = DictionaryGrid(dicts)
        selection = grid.get_selection()
        grid.remove_selected_rows()

        #select the last row and remove it
        selection.select_path((4, ))
        grid.remove_selected_rows()

        #the last row should then be selected and there should be 4 rows now
        self.assertEqual(len(grid.get_model()), 4)
        self.assertEqual(len(grid.selected_rows), 1)
        self.assertEqual(grid.selected_rows[0]["key1_1"], "val4_1")

        #select the first and third rows and remove them
        selection = grid.get_selection()
        selection.unselect_all()
        selection.select_path((0, ))
        selection.select_path((2, ))
        grid.remove_selected_rows()

        #make sure the now last row is selected, and there are 2 rows left
        self.assertEqual(len(grid.get_model()), 2)
        self.assertEqual(len(grid.selected_rows), 1)
        self.assertEqual(grid.selected_rows[0]["key1_2"], "val4_2")
예제 #17
0
 def test_infer_boolean_values(self):
     """Ensure that inferring boolean values from strings works"""
     keys = ["a?", "b?", "c?", "d?", "e?", "f?"]
     dicts = [{
         "a?": True,
         "b?": False,
         "c?": "Yes",
         "d?": "No",
         "e?": 1.5,
         "f?": 0
     }]
     grid = DictionaryGrid(dicts, keys)
     test_dict = grid.get_dictionaries_copy()[0]
     self.assertEqual(test_dict["a?"], True)
     self.assertEqual(test_dict["b?"], False)
     self.assertEqual(test_dict["c?"], True)
     self.assertEqual(test_dict["d?"], False)
     self.assertEqual(test_dict["e?"], True)
     self.assertEqual(test_dict["f?"], False)
예제 #18
0
    def openbutton_clicked_event(self, widget, data=None):
        #let the user choose a path with the directory chooser
        response, path = prompts.choose_directory()

        #make certain the user said ok before working
        if response == gtk.RESPONSE_OK:
            #make one list of support formats
            formats = self.allowed_formats

            #make a list of the supported media files
            media_files = []
            #iterate through root directory
            for root, dirs, files in os.walk(path):
                #iterate through each file
                for f in files:
                    #check if the file is a supported formats
                    for format in formats:
                        if f.lower().endswith(format):
                            #create a URI in a format gstreamer likes
                            file_uri = "file://" + os.path.join(root, f)

                            #add a dictionary to the list of media files
                            media_files.append({
                                "File": f,
                                "uri": file_uri,
                                "format": format
                            })

            #remove any children in scrolled window
            for c in self.ui.scrolledwindow1.get_children():
                self.ui.scrolledwindow1.remove(c)

            #create the grid with list of dictionaries
            #only show the File column
            media_grid = DictionaryGrid(media_files, keys=["File"])

            #hook up to the selection_changed event
            media_grid.connect("selection_changed", self.play_file)

            #show the grid, and add it to the scrolled window
            media_grid.show()
            self.ui.scrolledwindow1.add(media_grid)
    def test_remove_selected_with_filter(self):
        dicts = [{"key1_1": "val1_1", "key1_2": "val1_2", "key1_3": "val1_3"},
                 {"key1_1": "val2_1", "key1_2": "val2_2", "key1_3": "val2_3"},
                 {"key1_1": "val3_1", "key1_2": "val3_2", "key1_3": "val3_3"},
                 {"key1_1": "val4_1", "key1_2": "val4_2", "key1_3": "val4_3"},
                 {"key1_1": "val5_1", "key1_2": "val5_2", "key1_3": "val5_3"}]
        grid = DictionaryGrid(dicts)
        grid_filter = GridFilter(grid)
        filter_row = grid_filter.rows[0]
        filter_combo = filter_row.get_children()[1].get_children()[0].get_children()[0]
        filter_combo.set_active(1)
        entry = filter_row.get_children()[1].get_children()[0].get_children()[1]
        entry.set_text("val5_1")
                
        selection = grid.get_selection()
        selection.select_path((1,))
        selection.select_path((2,))

        grid.remove_selected_rows()

        self.assertEqual(len(grid.get_model()),2)
예제 #20
0
    def test_constructor_with_dicts_and_keys(self):
        """test creating a grid with dictionaries in the contructor
        as well as keys in the contructor, with fewer keys than
        items in the dictionary

        """
        dicts = [{
            "key1_1": "val1_1",
            "key1_2": "val1_2",
            "key1_3": "val1_3"
        }, {
            "key1_1": "val2_1",
            "key1_2": "val2_2",
            "key1_3": "val2_3"
        }]
        keys = ["key1_1", "key1_3"]

        #build the CouchGrid
        grid = DictionaryGrid(dicts, keys)
        self.assertEqual(grid.get_model().get_n_columns(), 4)
        self.assertEqual(len(grid.get_model()), 2)
예제 #21
0
    def test_auto_set_col_types(self):
        """Ensure that collumn types are set properly"""

        data = [{
            "id": 0,
            "price": 1.00,
            "bool?": True,
            "sale price": .50,
            "count": 50,
            "full count": 100,
            "date": "2010-05-05",
            "sale date": "2010-05-06"
        }]
        grid = DictionaryGrid(data)
        c_type = type(grid.columns["id"])
        self.assertEqual(c_type, IntegerColumn)

        c_type = type(grid.columns["price"])
        self.assertEqual(c_type, CurrencyColumn)

        c_type = type(grid.columns["bool?"])
        self.assertEqual(c_type, CheckColumn)

        c_type = type(grid.columns["sale price"])
        self.assertEqual(c_type, CurrencyColumn)

        c_type = type(grid.columns["count"])
        self.assertEqual(c_type, IntegerColumn)

        c_type = type(grid.columns["full count"])
        self.assertEqual(c_type, IntegerColumn)

        c_type = type(grid.columns["date"])
        self.assertEqual(c_type, DateColumn)

        c_type = type(grid.columns["sale date"])
        self.assertEqual(c_type, DateColumn)
예제 #22
0
 def test_NONE_values(self):
     keys = ["id", "price", "bool?", "foo"]
     dicts = [{"price": None, "id": None, "bool?": None, "foo": None}]
     grid = DictionaryGrid(dicts)
     self.assertEqual(len(grid.get_model()), 1)