def setup_class(cls): if not tests.is_search_supported(): raise tests.SkipTest("Search not supported") tests.setup_test_search_index() ctd.CreateTestData.create() model.repo.new_revision() cls.vocab = model.Vocabulary(TEST_VOCAB_NAME) model.Session.add(cls.vocab) model.Session.commit() vocab_tag_1 = model.Tag('tag1', cls.vocab.id) vocab_tag_2 = model.Tag('tag2', cls.vocab.id) model.Session.add(vocab_tag_1) model.Session.add(vocab_tag_2) pkg = model.Package.get('warandpeace') pkg_tag1 = model.PackageTag(pkg, vocab_tag_1) pkg_tag2 = model.PackageTag(pkg, vocab_tag_2) model.Session.add(pkg_tag1) model.Session.add(pkg_tag2) model.Session.commit() model.Session.remove()
def test_create_package_with_tags(self): model.repo.new_revision() pkg = model.Package(name=u'test-package') # method 1 tag1 = model.Tag(name=u'science') package_tag1 = model.PackageTag(package=pkg, tag=tag1) pkg.package_tag_all[:] = [package_tag1] # method 2 tag2 = model.Tag(name=u'geology') package_tag2 = model.PackageTag(package=pkg, tag=tag2) pkg.add_tag(tag2) # method 3 pkg.add_tag_by_name(u'energy') model.Session.add_all([pkg, package_tag1, package_tag2]) model.Session.commit() model.Session.remove() pkg = model.Package.by_name(u'test-package') assert_equal(set([tag.name for tag in pkg.get_tags()]), set([u'science', u'geology', u'energy']))
def add_tag(self, tag): import ckan.model as model if tag in self.get_tags(tag.vocabulary): return else: package_tag = model.PackageTag(self, tag) meta.Session.add(package_tag)
def test_create_package_with_tags(self): pkg = model.Package(name=factories.Dataset.stub().name) # method 1 tag1 = model.Tag(name=factories.Tag.stub().name) package_tag1 = model.PackageTag(package=pkg, tag=tag1) pkg.package_tags[:] = [package_tag1] # method 2 tag2 = model.Tag(name=factories.Tag.stub().name) package_tag2 = model.PackageTag(package=pkg, tag=tag2) pkg.add_tag(tag2) # method 3 pkg.add_tag_by_name(u"energy") model.Session.add_all([pkg, package_tag1, package_tag2]) model.Session.commit() model.Session.remove() pkg = model.Package.by_name(pkg.name) assert set([tag.name for tag in pkg.get_tags() ]) == set([tag1.name, tag2.name, u"energy"])
def test_create_package_with_tags(self): pkg = model.Package(name=u"test-package") # method 1 tag1 = model.Tag(name=u"science") package_tag1 = model.PackageTag(package=pkg, tag=tag1) pkg.package_tag_all[:] = [package_tag1] # method 2 tag2 = model.Tag(name=u"geology") package_tag2 = model.PackageTag(package=pkg, tag=tag2) pkg.add_tag(tag2) # method 3 pkg.add_tag_by_name(u"energy") model.Session.add_all([pkg, package_tag1, package_tag2]) model.Session.commit() model.Session.remove() pkg = model.Package.by_name(u"test-package") assert set([tag.name for tag in pkg.get_tags() ]) == set([u"science", u"geology", u"energy"])
def initial_data(self, clean_db, clean_index): if not tests.is_search_supported(): raise tests.SkipTest("Search not supported") ctd.CreateTestData.create() self.vocab = model.Vocabulary(TEST_VOCAB_NAME) model.Session.add(self.vocab) model.Session.commit() vocab_tag_1 = model.Tag("tag1", self.vocab.id) vocab_tag_2 = model.Tag("tag2", self.vocab.id) model.Session.add(vocab_tag_1) model.Session.add(vocab_tag_2) pkg = model.Package.get("warandpeace") pkg_tag1 = model.PackageTag(pkg, vocab_tag_1) pkg_tag2 = model.PackageTag(pkg, vocab_tag_2) model.Session.add(pkg_tag1) model.Session.add(pkg_tag2) model.Session.commit() model.Session.remove()
def setup_class(self): model.repo.init_db() rev1 = model.repo.new_revision() self.tagname = u'testtagm2m' self.tagname2 = u'testtagm2m2' self.tagname3 = u'testtag3' self.pkgname = u'testpkgm2m' pkg = model.Package(name=self.pkgname) self.tag = model.Tag(name=self.tagname) self.tag2 = model.Tag(name=self.tagname2) pkg2tag = model.PackageTag(package=pkg, tag=self.tag) pkg.tags.append(self.tag2) model.Session.add_all([pkg,self.tag,self.tag2,pkg2tag]) model.Session.commit() self.pkg2tag_id = pkg2tag.id self.rev = rev1
def package_tag_list_save(tag_dicts: Optional[list[dict[str, Any]]], package: 'model.Package', context: Context) -> None: allow_partial_update = context.get("allow_partial_update", False) if tag_dicts is None and allow_partial_update: return model = context["model"] session = context["session"] tag_package_tag = dict( (package_tag.tag, package_tag) for package_tag in package.package_tags) tag_package_tag_inactive = { tag: pt for tag, pt in tag_package_tag.items() if pt.state in ['deleted'] } tag_name_vocab: set[tuple[str, str]] = set() tags: set[model.Tag] = set() for tag_dict in tag_dicts or []: name_vocab = (tag_dict.get('name'), tag_dict.get('vocabulary_id')) if name_vocab not in tag_name_vocab: tag_obj = d.table_dict_save(tag_dict, model.Tag, context) tags.add(tag_obj) tag_name_vocab.add((tag_obj.name, tag_obj.vocabulary_id)) # 3 cases # case 1: currently active but not in new list for tag in set(tag_package_tag.keys()) - tags: package_tag = tag_package_tag[tag] package_tag.state = 'deleted' # case 2: in new list but never used before for tag in tags - set(tag_package_tag.keys()): state = 'active' package_tag_obj = model.PackageTag(package, tag, state) session.add(package_tag_obj) tag_package_tag[tag] = package_tag_obj # case 3: in new list and already used but in deleted state for tag in tags.intersection(set(tag_package_tag_inactive.keys())): state = 'active' package_tag = tag_package_tag[tag] package_tag.state = state package.package_tags[:] = tag_package_tag.values()