1 '''
2 Created on Jan 18, 2010
3
4 @author: tw55413
5 '''
6
7 from progress_page import ProgressPage
8
9
10 -class UpdateEntitiesPage(ProgressPage):
11 """A progress page that updates each entity in a collection,
12 then flushes the entity, and informs all views that the entity
13 has been updated. Subclass this page and implement update_entity
14 to make this page do something.
15 """
16
17 - def __init__(self, collection_getter, parent):
18 super(UpdateEntitiesPage, self).__init__( parent )
19 self._wizard = parent
20 self._collection_getter = collection_getter
21
22 - def update_entity(self, entity):
23 """Implement this method to update the entities in the
24 collection.
25
26 :param entity: the entity that should be updated
27 :return: None or a string that will be displayed in the progress
28 screen.
29 """
30 pass
31
33 from sqlalchemy.orm.session import Session
34 from camelot.view.remote_signals import get_signal_handler
35 signal_handler = get_signal_handler()
36 collection = list(self._collection_getter())
37 self.emit(self.update_maximum_signal, len(collection))
38 for i, entity in enumerate(collection):
39 message = self.update_entity(entity)
40 Session.object_session( entity ).flush( [entity] )
41 signal_handler.sendEntityUpdate( self, entity )
42 self.emit(self.update_progress_signal, i, message)
43