def merge_perm(sm, permission_name, view_menu_name, connection): permission = sm.find_permission(permission_name) view_menu = sm.find_view_menu(view_menu_name) pv = None if not permission: permission_table = sm.permission_model.__table__ connection.execute( permission_table.insert() .values(name=permission_name) ) if not view_menu: view_menu_table = sm.viewmenu_model.__table__ connection.execute( view_menu_table.insert() .values(name=view_menu_name) ) permission = sm.find_permission(permission_name) view_menu = sm.find_view_menu(view_menu_name) if permission and view_menu: pv = sm.get_session.query(sm.permissionview_model).filter_by( permission=permission, view_menu=view_menu).first() if not pv and permission and view_menu: permission_view_table = sm.permissionview_model.__table__ connection.execute( permission_view_table.insert() .values( permission_id=permission.id, view_menu_id=view_menu.id ) )
def merge_perm(sm, permission_name, view_menu_name, connection): permission = sm.find_permission(permission_name) view_menu = sm.find_view_menu(view_menu_name) pv = None if not permission: permission_table = sm.permission_model.__table__ connection.execute( permission_table.insert() .values(name=permission_name), ) if not view_menu: view_menu_table = sm.viewmenu_model.__table__ connection.execute( view_menu_table.insert() .values(name=view_menu_name), ) permission = sm.find_permission(permission_name) view_menu = sm.find_view_menu(view_menu_name) if permission and view_menu: pv = sm.get_session.query(sm.permissionview_model).filter_by( permission=permission, view_menu=view_menu).first() if not pv and permission and view_menu: permission_view_table = sm.permissionview_model.__table__ connection.execute( permission_view_table.insert() .values( permission_id=permission.id, view_menu_id=view_menu.id, ), )
def _delete(self, pk): """ Delete function logic, override to implement diferent logic deletes the record with primary_key = pk :param pk: record primary key to delete """ item = self.datamodel.get(pk, self._base_filters) if not item: abort(404) try: self.pre_delete(item) except Exception as e: flash(str(e), 'danger') else: view_menu = sm.find_view_menu(item.get_perm()) pvs = sm.get_session.query( sm.permissionview_model).filter_by(view_menu=view_menu).all() schema_view_menu = None if hasattr(item, 'schema_perm'): schema_view_menu = sm.find_view_menu(item.schema_perm) pvs.extend( sm.get_session.query(sm.permissionview_model).filter_by( view_menu=schema_view_menu).all()) if self.datamodel.delete(item): self.post_delete(item) for pv in pvs: sm.get_session.delete(pv) if view_menu: sm.get_session.delete(view_menu) if schema_view_menu: sm.get_session.delete(schema_view_menu) sm.get_session.commit() flash(*self.datamodel.message) self.update_redirect()
def _delete(self, pk): """ Delete function logic, override to implement diferent logic deletes the record with primary_key = pk :param pk: record primary key to delete """ item = self.datamodel.get(pk, self._base_filters) if not item: abort(404) try: self.pre_delete(item) except Exception as e: flash(str(e), 'danger') else: view_menu = sm.find_view_menu(item.get_perm()) pvs = sm.get_session.query(sm.permissionview_model).filter_by( view_menu=view_menu).all() schema_view_menu = None if hasattr(item, 'schema_perm'): schema_view_menu = sm.find_view_menu(item.schema_perm) pvs.extend(sm.get_session.query( sm.permissionview_model).filter_by( view_menu=schema_view_menu).all()) if self.datamodel.delete(item): self.post_delete(item) for pv in pvs: sm.get_session.delete(pv) if view_menu: sm.get_session.delete(view_menu) if schema_view_menu: sm.get_session.delete(schema_view_menu) sm.get_session.commit() flash(*self.datamodel.message) self.update_redirect()
def merge_perm(sm, permission_name, view_menu_name): # Implementation copied from sm.find_permission_view_menu. # TODO: use sm.find_permission_view_menu once issue # https://github.com/airbnb/superset/issues/1944 is resolved. permission = sm.find_permission(permission_name) view_menu = sm.find_view_menu(view_menu_name) pv = None if permission and view_menu: pv = sm.get_session.query(sm.permissionview_model).filter_by( permission=permission, view_menu=view_menu).first() if not pv and permission_name and view_menu_name: sm.add_permission_view_menu(permission_name, view_menu_name)
def test_sync_druid_perm(self, PyDruid): self.login(username='******') instance = PyDruid.return_value instance.time_boundary.return_value = [ {'result': {'maxTime': '2016-01-01'}}] instance.segment_metadata.return_value = SEGMENT_METADATA cluster = ( db.session .query(DruidCluster) .filter_by(cluster_name='test_cluster') .first() ) if cluster: db.session.delete(cluster) db.session.commit() cluster = DruidCluster( cluster_name='test_cluster', coordinator_host='localhost', coordinator_port=7979, broker_host='localhost', broker_port=7980, metadata_last_refreshed=datetime.now()) db.session.add(cluster) cluster.get_datasources = PickableMock( return_value=['test_datasource'], ) cluster.get_druid_version = PickableMock(return_value='0.9.1') cluster.refresh_datasources() cluster.datasources[0].merge_flag = True metadata = cluster.datasources[0].latest_metadata() self.assertEqual(len(metadata), 4) db.session.commit() view_menu_name = cluster.datasources[0].get_perm() view_menu = sm.find_view_menu(view_menu_name) permission = sm.find_permission('datasource_access') pv = sm.get_session.query(sm.permissionview_model).filter_by( permission=permission, view_menu=view_menu).first() assert pv is not None