def test_dashboard_tags(self): strategy = DashboardTagsStrategy(['tag1']) result = sorted(strategy.get_urls()) expected = [] self.assertEqual(result, expected) # tag dashboard 3 with `tag1` tag1 = get_tag('tag1', db.session, TagTypes.custom) object_id = 3 tagged_object = TaggedObject( tag_id=tag1.id, object_id=object_id, object_type=ObjectTypes.dashboard, ) db.session.add(tagged_object) db.session.commit() result = sorted(strategy.get_urls()) expected = [ f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+31%7D', ] self.assertEqual(result, expected) strategy = DashboardTagsStrategy(['tag2']) result = sorted(strategy.get_urls()) expected = [] self.assertEqual(result, expected) # tag chart 30 with `tag2` tag2 = get_tag('tag2', db.session, TagTypes.custom) object_id = 30 tagged_object = TaggedObject( tag_id=tag2.id, object_id=object_id, object_type=ObjectTypes.chart, ) db.session.add(tagged_object) db.session.commit() result = sorted(strategy.get_urls()) expected = [ f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+30%7D', ] self.assertEqual(result, expected) strategy = DashboardTagsStrategy(['tag1', 'tag2']) result = sorted(strategy.get_urls()) expected = [ f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+30%7D', f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+31%7D', ] self.assertEqual(result, expected)
def test_dashboard_tags(self): tag1 = get_tag("tag1", db.session, TagTypes.custom) # delete first to make test idempotent self.reset_tag(tag1) strategy = DashboardTagsStrategy(["tag1"]) result = sorted(strategy.get_urls()) expected = [] self.assertEqual(result, expected) # tag dashboard 'births' with `tag1` tag1 = get_tag("tag1", db.session, TagTypes.custom) dash = self.get_dash_by_slug("births") tag1_urls = sorted([f"{URL_PREFIX}{slc.url}" for slc in dash.slices]) tagged_object = TaggedObject(tag_id=tag1.id, object_id=dash.id, object_type=ObjectTypes.dashboard) db.session.add(tagged_object) db.session.commit() self.assertEqual(sorted(strategy.get_urls()), tag1_urls) strategy = DashboardTagsStrategy(["tag2"]) tag2 = get_tag("tag2", db.session, TagTypes.custom) self.reset_tag(tag2) result = sorted(strategy.get_urls()) expected = [] self.assertEqual(result, expected) # tag first slice dash = self.get_dash_by_slug("unicode-test") slc = dash.slices[0] tag2_urls = [f"{URL_PREFIX}{slc.url}"] object_id = slc.id tagged_object = TaggedObject(tag_id=tag2.id, object_id=object_id, object_type=ObjectTypes.chart) db.session.add(tagged_object) db.session.commit() result = sorted(strategy.get_urls()) self.assertEqual(result, tag2_urls) strategy = DashboardTagsStrategy(["tag1", "tag2"]) result = sorted(strategy.get_urls()) expected = sorted(tag1_urls + tag2_urls) self.assertEqual(result, expected)
def upgrade(): bind = op.get_bind() session = db.Session(bind=bind) Tag.__table__.create(bind) TaggedObject.__table__.create(bind) # add type tags (eg, `type:dashboard` for dashboards) for type in ObjectTypes.__members__: session.add(Tag(name='type:{0}'.format(type), type=TagTypes.type)) # add owner tags (eg, `owner:1` for things owned by the admin) for chart in session.query(Slice): for owner in chart.owners: name = 'owner:{0}'.format(owner.id) tag = get_tag(name, session, TagTypes.owner) tagged_object = TaggedObject( tag_id=tag.id, object_id=chart.id, object_type=ObjectTypes.chart, ) session.add(tagged_object) tag = get_tag('type:chart', session, TagTypes.type) tagged_object = TaggedObject( tag_id=tag.id, object_id=chart.id, object_type=ObjectTypes.chart, ) session.add(tagged_object) for dashboard in session.query(Dashboard): for owner in dashboard.owners: name = 'owner:{0}'.format(owner.id) tag = get_tag(name, session, TagTypes.owner) tagged_object = TaggedObject( tag_id=tag.id, object_id=dashboard.id, object_type=ObjectTypes.dashboard, ) session.add(tagged_object) tag = get_tag('type:dashboard', session, TagTypes.type) tagged_object = TaggedObject( tag_id=tag.id, object_id=dashboard.id, object_type=ObjectTypes.dashboard, ) session.add(tagged_object) for query in session.query(SavedQuery): name = 'owner:{0}'.format(query.user_id) tag = get_tag(name, session, TagTypes.owner) tagged_object = TaggedObject( tag_id=tag.id, object_id=query.id, object_type=ObjectTypes.query, ) session.add(tagged_object) tag = get_tag('type:query', session, TagTypes.type) tagged_object = TaggedObject( tag_id=tag.id, object_id=query.id, object_type=ObjectTypes.query, ) session.add(tagged_object) # add favorited_by tags for star in session.query(Favstar): name = 'favorited_by:{0}'.format(star.user_id) tag = get_tag(name, session, TagTypes.favorited_by) tagged_object = TaggedObject( tag_id=tag.id, object_id=star.obj_id, object_type=get_object_type(star.class_name), ) session.add(tagged_object) session.commit()