示例#1
0
 def test_insert_after_sort( self ):
     from camelot.view.proxy.queryproxy import QueryTableProxy
     from camelot.model.party import Person
     self.person_proxy.sort( 1, Qt.AscendingOrder )
     # check the query
     self.assertTrue( self.person_proxy.columnCount() > 0 )
     rowcount = self.person_proxy.rowCount()
     self.assertTrue( rowcount > 0 )
     # check the sorting
     self._load_data()
     data0 = self._data( 0, 1 )
     data1 = self._data( 1, 1 )
     self.assertTrue( data1 > data0 )
     self.person_proxy.sort( 1, Qt.DescendingOrder )
     self._load_data()
     data0 = self._data( 0, 1 )
     data1 = self._data( 1, 1 )
     self.assertTrue( data0 > data1 )
     # insert a new object
     person = Person()
     self.person_proxy.append_object( person )
     new_rowcount = self.person_proxy.rowCount()
     self.assertTrue( new_rowcount > rowcount )
     new_row = new_rowcount - 1
     self.assertEqual( person, self.person_proxy._get_object( new_row ) )
     # fill in the required fields
     self.assertFalse( self.person_admin.is_persistent( person ) )
     self._set_data( new_row, 0, 'Foo' )
     self._set_data( new_row, 1, 'Bar' )
     self.assertEqual( person.first_name, 'Foo' )
     self.assertEqual( person.last_name, 'Bar' )
     self._load_data()
     self.assertEqual( self._data( new_row, 0 ), 'Foo' )
     self.assertEqual( self._data( new_row, 1 ), 'Bar' )
     self.assertTrue( self.person_admin.is_persistent( person ) )
     # create a related proxy (eg, to display a form view)
     related_proxy = QueryTableProxy(
         self.person_admin,
         self.person_proxy.get_query_getter(),
         self.person_admin.get_columns,
         max_number_of_rows = 1,
         cache_collection_proxy = self.person_proxy
     )
     self.assertEqual( new_rowcount, related_proxy.rowCount() )
     self._load_data( related_proxy )
     self.assertEqual( self._data( new_row, 0, related_proxy ), 'Foo' )
示例#2
0
 def test_drag_and_drop( self ):
     from camelot.view.proxy.queryproxy import QueryTableProxy
     
     class DropAction( Action ):
         pass
             
     
     mime_data = QtCore.QMimeData()
     admin = self.context.admin
     admin.drop_action = DropAction()
     
     proxy = QueryTableProxy( admin, admin.get_query, admin.get_columns )
     proxy.dropMimeData( mime_data, 
                         Qt.MoveAction, 
                         -1, 
                         -1, 
                         QtCore.QModelIndex() )
示例#3
0
 def test_drag_and_drop( self ):
     from camelot.view.proxy.queryproxy import QueryTableProxy
     
     class DropAction( Action ):
         pass
             
     
     mime_data = QtCore.QMimeData()
     admin = self.context.admin
     admin.drop_action = DropAction()
     
     proxy = QueryTableProxy( admin, admin.get_query, admin.get_columns )
     proxy.dropMimeData( mime_data, 
                         Qt.MoveAction, 
                         -1, 
                         -1, 
                         QtCore.QModelIndex() )
示例#4
0
    def render(self, gui_context):
        from camelot.view.proxy.queryproxy import QueryTableProxy
        from camelot.view.proxy.collection_proxy import CollectionProxy
        from camelot.view.controls.formview import FormView

        if self.objects is None:
            related_model = gui_context.item_view.model()
            #
            # depending on the type of related model, create a new model
            #
            row = gui_context.item_view.currentIndex().row()
            if isinstance(related_model, QueryTableProxy):
                # here the query and the cache are passed to the proxy
                # constructor to prevent an additional query when a
                # form is opened to look for an object that was in the list
                model = QueryTableProxy(
                    gui_context.admin,
                    query=related_model.get_query(),
                    max_number_of_rows=1,
                    cache_collection_proxy=related_model,
                )
            else:
                # no cache or sorting information is transferred
                model = CollectionProxy(
                    gui_context.admin,
                    max_number_of_rows=1,
                )
                # get the unsorted row
                row = related_model.map_to_source(row)
                model.set_value(related_model.get_value())
        else:
            row = self.row
            model = CollectionProxy(self.admin, max_number_of_rows=10)
            model.set_value(self.objects)
        model.set_columns(self._columns)

        form = FormView(title=self.title,
                        admin=self.admin,
                        model=model,
                        columns=self._columns,
                        form_display=self._form_display,
                        index=row)
        form.set_actions(self.actions)
        form.set_toolbar_actions(self.top_toolbar_actions)
        return form
示例#5
0
 def test_insert_after_sort(self):
     from camelot.view.proxy.queryproxy import QueryTableProxy
     from camelot.model.party import Person
     self.proxy.sort(1, Qt.AscendingOrder)
     # check the query
     self.assertTrue(self.proxy.columnCount() > 0)
     rowcount = self.proxy.rowCount()
     self.assertTrue(rowcount > 0)
     # check the sorting
     self._load_data()
     data0 = self._data(0, 1)
     data1 = self._data(1, 1)
     self.assertTrue(data1 > data0)
     self.proxy.sort(1, Qt.DescendingOrder)
     self._load_data()
     data0 = self._data(0, 1)
     data1 = self._data(1, 1)
     self.assertTrue(data0 > data1)
     # insert a new object
     person = Person()
     self.proxy.append_object(person)
     new_rowcount = self.proxy.rowCount()
     self.assertTrue(new_rowcount > rowcount)
     new_row = new_rowcount - 1
     self.assertEqual(person, self.proxy._get_object(new_row))
     # fill in the required fields
     self.assertFalse(self.person_admin.is_persistent(person))
     self._set_data(new_row, 0, 'Foo')
     self._set_data(new_row, 1, 'Bar')
     self.assertEqual(person.first_name, 'Foo')
     self.assertEqual(person.last_name, 'Bar')
     self._load_data()
     self.assertEqual(self._data(new_row, 0), 'Foo')
     self.assertEqual(self._data(new_row, 1), 'Bar')
     self.assertTrue(self.person_admin.is_persistent(person))
     # create a related proxy (eg, to display a form view)
     related_proxy = QueryTableProxy(self.person_admin,
                                     self.proxy.get_query_getter(),
                                     self.person_admin.get_columns,
                                     max_number_of_rows=1,
                                     cache_collection_proxy=self.proxy)
     self.assertEqual(new_rowcount, related_proxy.rowCount())
     self._load_data(related_proxy)
     self.assertEqual(self._data(new_row, 0, related_proxy), 'Foo')
示例#6
0
 def setUp(self):
     super( QueryProxyCase, self ).setUp()
     from camelot_example.fixtures import load_movie_fixtures
     from camelot.model.party import Person
     from camelot.view.proxy.queryproxy import QueryTableProxy
     from camelot.admin.application_admin import ApplicationAdmin
     load_movie_fixtures()
     self.app_admin = ApplicationAdmin()
     self.person_admin = self.app_admin.get_related_admin( Person )
     Person.query.count
     self.person_proxy = QueryTableProxy( self.person_admin, 
                                          query_getter = lambda:Person.query, 
                                          columns_getter = self.person_admin.get_columns )
示例#7
0
 def openForm(index):
     model = QueryTableProxy(
         tableview.admin,
         tableview._table_model.get_query_getter(),
         tableview.admin.get_fields,
         max_number_of_rows=1,
         cache_collection_proxy=tableview._table_model)
     title = ''
     formview = tableview.admin.create_form_view(title,
                                                 model,
                                                 index,
                                                 parent=None)
     show_top_level(formview, tableview)
示例#8
0
 def gui_run(self, gui_context):
     from camelot.view.workspace import show_top_level
     from camelot.view.proxy.queryproxy import QueryTableProxy
     from camelot.view.proxy.collection_proxy import CollectionProxy
     related_model = gui_context.item_view.model()
     #
     # depending on the type of related model, create a new model
     #
     row = gui_context.item_view.currentIndex().row()
     if isinstance(related_model, QueryTableProxy):
         model = QueryTableProxy(
             gui_context.admin,
             related_model.get_query_getter(),
             gui_context.admin.get_fields,
             max_number_of_rows=1,
             cache_collection_proxy=related_model,
         )
     else:
         # no cache or sorting information is transferred
         model = CollectionProxy(
             gui_context.admin,
             related_model.get_collection,
             gui_context.admin.get_fields,
             max_number_of_rows=1,
         )
         # get the unsorted row
         row = related_model.map_to_source(row)
     formview = gui_context.admin.create_form_view(
         u' ',
         model,
         row,
     )
     # make sure there is no 'pythonw' window title in windows for a
     # second
     formview.setWindowTitle(u' ')
     show_top_level(formview, gui_context.item_view)
示例#9
0
class QueryProxyCase( ModelThreadTestCase ):
    """Test the functionality of the QueryProxy to perform CRUD operations on 
    stand alone data"""
  
    def setUp(self):
        super( QueryProxyCase, self ).setUp()
        from camelot_example.fixtures import load_movie_fixtures
        from camelot.model.party import Person
        from camelot.view.proxy.queryproxy import QueryTableProxy
        from camelot.admin.application_admin import ApplicationAdmin
        load_movie_fixtures()
        self.app_admin = ApplicationAdmin()
        self.person_admin = self.app_admin.get_related_admin( Person )
        Person.query.count
        self.person_proxy = QueryTableProxy( self.person_admin, 
                                             query_getter = lambda:Person.query, 
                                             columns_getter = self.person_admin.get_columns )
  
    def _load_data( self, proxy = None ):
        """Trigger the loading of data by the proxy"""
        if proxy == None:
            proxy = self.person_proxy
        for row in range( proxy.rowCount() ):
            self._data( row, 0, proxy )
        self.process()
        
    def _data( self, row, column, proxy = None ):
        """Get data from the proxy"""
        if proxy == None:
            proxy = self.person_proxy
        index = proxy.index( row, column )
        return variant_to_pyobject( proxy.data( index ) )
    
    def _set_data( self, row, column, value ):
        """Set data to the proxy"""
        index = self.person_proxy.index( row, column )
        return self.person_proxy.setData( index, lambda:value )
      
    def test_insert_after_sort( self ):
        from camelot.view.proxy.queryproxy import QueryTableProxy
        from camelot.model.party import Person
        self.person_proxy.sort( 1, Qt.AscendingOrder )
        # check the query
        self.assertTrue( self.person_proxy.columnCount() > 0 )
        rowcount = self.person_proxy.rowCount()
        self.assertTrue( rowcount > 0 )
        # check the sorting
        self._load_data()
        data0 = self._data( 0, 1 )
        data1 = self._data( 1, 1 )
        self.assertTrue( data1 > data0 )
        self.person_proxy.sort( 1, Qt.DescendingOrder )
        self._load_data()
        data0 = self._data( 0, 1 )
        data1 = self._data( 1, 1 )
        self.assertTrue( data0 > data1 )
        # insert a new object
        person = Person()
        self.person_proxy.append_object( person )
        new_rowcount = self.person_proxy.rowCount()
        self.assertTrue( new_rowcount > rowcount )
        new_row = new_rowcount - 1
        self.assertEqual( person, self.person_proxy._get_object( new_row ) )
        # fill in the required fields
        self.assertFalse( self.person_admin.is_persistent( person ) )
        self._set_data( new_row, 0, 'Foo' )
        self._set_data( new_row, 1, 'Bar' )
        self.assertEqual( person.first_name, 'Foo' )
        self.assertEqual( person.last_name, 'Bar' )
        self._load_data()
        self.assertEqual( self._data( new_row, 0 ), 'Foo' )
        self.assertEqual( self._data( new_row, 1 ), 'Bar' )
        self.assertTrue( self.person_admin.is_persistent( person ) )
        # create a related proxy (eg, to display a form view)
        related_proxy = QueryTableProxy(
            self.person_admin,
            self.person_proxy.get_query_getter(),
            self.person_admin.get_columns,
            max_number_of_rows = 1,
            cache_collection_proxy = self.person_proxy
        )
        self.assertEqual( new_rowcount, related_proxy.rowCount() )
        self._load_data( related_proxy )
        self.assertEqual( self._data( new_row, 0, related_proxy ), 'Foo' )
示例#10
0
 def setUp(self):
     super(QueryProxyCase, self).setUp()
     self.proxy = QueryTableProxy(
         self.person_admin,
         query_getter=lambda: Person.query,
         columns_getter=self.person_admin.get_columns)
示例#11
0
class QueryProxyCase(ProxyCase):
    """Test the functionality of the QueryProxy to perform CRUD operations on 
    stand alone data"""
    def setUp(self):
        super(QueryProxyCase, self).setUp()
        self.proxy = QueryTableProxy(
            self.person_admin,
            query_getter=lambda: Person.query,
            columns_getter=self.person_admin.get_columns)

    def test_insert_after_sort(self):
        from camelot.view.proxy.queryproxy import QueryTableProxy
        from camelot.model.party import Person
        self.proxy.sort(1, Qt.AscendingOrder)
        # check the query
        self.assertTrue(self.proxy.columnCount() > 0)
        rowcount = self.proxy.rowCount()
        self.assertTrue(rowcount > 0)
        # check the sorting
        self._load_data()
        data0 = self._data(0, 1)
        data1 = self._data(1, 1)
        self.assertTrue(data1 > data0)
        self.proxy.sort(1, Qt.DescendingOrder)
        self._load_data()
        data0 = self._data(0, 1)
        data1 = self._data(1, 1)
        self.assertTrue(data0 > data1)
        # insert a new object
        person = Person()
        self.proxy.append_object(person)
        new_rowcount = self.proxy.rowCount()
        self.assertTrue(new_rowcount > rowcount)
        new_row = new_rowcount - 1
        self.assertEqual(person, self.proxy._get_object(new_row))
        # fill in the required fields
        self.assertFalse(self.person_admin.is_persistent(person))
        self._set_data(new_row, 0, 'Foo')
        self._set_data(new_row, 1, 'Bar')
        self.assertEqual(person.first_name, 'Foo')
        self.assertEqual(person.last_name, 'Bar')
        self._load_data()
        self.assertEqual(self._data(new_row, 0), 'Foo')
        self.assertEqual(self._data(new_row, 1), 'Bar')
        self.assertTrue(self.person_admin.is_persistent(person))
        # create a related proxy (eg, to display a form view)
        related_proxy = QueryTableProxy(self.person_admin,
                                        self.proxy.get_query_getter(),
                                        self.person_admin.get_columns,
                                        max_number_of_rows=1,
                                        cache_collection_proxy=self.proxy)
        self.assertEqual(new_rowcount, related_proxy.rowCount())
        self._load_data(related_proxy)
        self.assertEqual(self._data(new_row, 0, related_proxy), 'Foo')

    def test_get_object(self):
        #
        # verify that get_object retruns None when the requested row
        # is out of range
        #
        self.assertFalse(self.proxy._get_object(-1))
        rows = self.proxy.rowCount()
        self.assertTrue(rows > 1)
        self.assertTrue(self.proxy._get_object(0))
        self.assertTrue(self.proxy._get_object(rows - 1))
        self.assertFalse(self.proxy._get_object(rows))
        self.assertFalse(self.proxy._get_object(rows + 1))
示例#12
0
 def setUp(self):
     super( QueryProxyCase, self ).setUp()
     self.proxy = QueryTableProxy( self.person_admin, 
                                          query_getter = lambda:Person.query, 
                                          columns_getter = self.person_admin.get_columns )
示例#13
0
class QueryProxyCase( ProxyCase ):
    """Test the functionality of the QueryProxy to perform CRUD operations on 
    stand alone data"""
  
    def setUp(self):
        super( QueryProxyCase, self ).setUp()
        self.proxy = QueryTableProxy( self.person_admin, 
                                             query_getter = lambda:Person.query, 
                                             columns_getter = self.person_admin.get_columns )

    def test_insert_after_sort( self ):
        from camelot.view.proxy.queryproxy import QueryTableProxy
        from camelot.model.party import Person
        self.proxy.sort( 1, Qt.AscendingOrder )
        # check the query
        self.assertTrue( self.proxy.columnCount() > 0 )
        rowcount = self.proxy.rowCount()
        self.assertTrue( rowcount > 0 )
        # check the sorting
        self._load_data()
        data0 = self._data( 0, 1 )
        data1 = self._data( 1, 1 )
        self.assertTrue( data1 > data0 )
        self.proxy.sort( 1, Qt.DescendingOrder )
        self._load_data()
        data0 = self._data( 0, 1 )
        data1 = self._data( 1, 1 )
        self.assertTrue( data0 > data1 )
        # insert a new object
        person = Person()
        self.proxy.append_object( person )
        new_rowcount = self.proxy.rowCount()
        self.assertTrue( new_rowcount > rowcount )
        new_row = new_rowcount - 1
        self.assertEqual( person, self.proxy._get_object( new_row ) )
        # fill in the required fields
        self.assertFalse( self.person_admin.is_persistent( person ) )
        self._set_data( new_row, 0, 'Foo' )
        self._set_data( new_row, 1, 'Bar' )
        self.assertEqual( person.first_name, 'Foo' )
        self.assertEqual( person.last_name, 'Bar' )
        self._load_data()
        self.assertEqual( self._data( new_row, 0 ), 'Foo' )
        self.assertEqual( self._data( new_row, 1 ), 'Bar' )
        self.assertTrue( self.person_admin.is_persistent( person ) )
        # create a related proxy (eg, to display a form view)
        related_proxy = QueryTableProxy(
            self.person_admin,
            self.proxy.get_query_getter(),
            self.person_admin.get_columns,
            max_number_of_rows = 1,
            cache_collection_proxy = self.proxy
        )
        self.assertEqual( new_rowcount, related_proxy.rowCount() )
        self._load_data( related_proxy )
        self.assertEqual( self._data( new_row, 0, related_proxy ), 'Foo' )
        
    def test_get_object( self ):
        #
        # verify that get_object retruns None when the requested row
        # is out of range
        #
        self.assertFalse( self.proxy._get_object( -1 ) )
        rows = self.proxy.rowCount()
        self.assertTrue( rows > 1 )
        self.assertTrue( self.proxy._get_object( 0 ) )
        self.assertTrue( self.proxy._get_object( rows - 1 ) )        
        self.assertFalse( self.proxy._get_object( rows ) )
        self.assertFalse( self.proxy._get_object( rows + 1 ) )