def test_removeFeaturelet(self): featurelet = ListenFeaturelet(self.project) fletsupporter = IFeatureletSupporter(self.project) fletsupporter.installFeaturelet(featurelet) fletsupporter.removeFeaturelet(featurelet) list_folder_id = featurelet._info['content'][0]['id'] self.failIf(list_folder_id in self.project.objectIds()) request = self.project.REQUEST try: view = getMultiAdapter((self.project, request), Interface, ListenFeaturelet.config_view) except ComponentLookupError: pass else: self.fail("Config view shouldn't be available after the " "featurelet has been removed.")
def save_featurelets(obj, event=None, request=None): """ IObjectModified event subscriber that installs the appropriate featurelets. """ if IContainerModifiedEvent.providedBy(event): # we only care about direct edits return if not request: request = obj.REQUEST if event and request.get('__initialize_project__', None): # bail if project isn't actuated yet and we are used via an # IObjectModifiedEvent event return if request.get('set_flets') is None: # don't do anything unless we're actually coming from the # project edit screen return # XXX there must be a better way... :-| if request.get('flet_recurse_flag') is not None: return request.set('flet_recurse_flag', True) supporter = IFeatureletSupporter(obj) flets = dict(getAdapters((supporter,), IFeaturelet)) desired = request.form.get('featurelets') if desired is None: desired = tuple() desired = set(desired) installed = set([name for name, flet in flets.items() if flet.installed]) needed = desired.difference(installed) for flet_id in needed: supporter.installFeaturelet(flets[flet_id]) removed = installed.difference(desired) for flet_id in removed: supporter.removeFeaturelet(flets[flet_id])
def handle_flet_uninstall(project, event=None): supporter = IFeatureletSupporter(project) for flet_id in supporter.getInstalledFeatureletIds(): supporter.removeFeaturelet(flet_id, raise_error=False)