Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Keyword Manager for Plone

kitconcept.keywordmanager

PyPI PyPI - Python Version PyPI - Wheel PyPI - License PyPI - Status

PyPI - Plone Versions

CI

Ruff

GitHub contributors GitHub Repo stars

The backend package for Keyword Manager for Plone — a Plone 6 add-on that lets content editors rename, merge, and delete keywords (subjects/tags) across a site, with all content updated automatically. See also the frontend package @kitconcept/volto-keywordmanager.

Keyword Manager

Features 🔥

  • Browse all keywords currently in use, sorted by name or by number of occurrences.
  • Filter keywords to quickly find a specific term in a long list.
  • Rename a keyword — the new name is applied to every content item that uses it automatically.
  • Merge keywords — combine synonyms, fix typos, or resolve ambiguities by merging multiple keywords into one canonical term; all affected content is updated in one step.
  • Delete keywords — remove terms that are no longer needed.
  • Manage multiple keyword fields — works with the standard Subject field and any other keyword-type index in the catalog.

Requirements

  • Plone 6.1 or 6.2
  • Python 3.11, 3.12, or 3.13

Installation 🔧

Install kitconcept.keywordmanager with uv.

uv add kitconcept.keywordmanager

Create the Plone site.

make create-site

Configuration

This package allows for some configuration.

To configure one of the following options, import the config module like so:

from kitconcept.keywordmanager import config

Options

The keywords permission allows you to set a custom permission who should be able to manage keywords.

config.MANAGE_KEYWORDS_PERMISSION = "kitconcept.keywordmanager: Manage Keywords"

The meta type of the keyword indexes can be set. This is only useful if you're one of those crazy people that use custom indexes.

config.META_TYPE = "KeywordIndex"

There are indexes of META_TYPE we know we don't want to manage because bad things will happen. You can exclude those using:

config.IGNORE_INDEXES = [
    "object_provides",
    "allowedRolesAndUsers",
    "getRawRelatedItems",
    "getEventType",
    "block_types",
]

You can set a list of indexes that should always be reindex when merging or deleting keywords on objects. Most people won't need this.

config.ALWAYS_REINDEX = ("SearchableText",)

REST API

GET /@keywords (or /path/to/page/@keywords)

Parameter Source Type / Values Required Default Description
idx form string no "Subject" The keyword index to query.
sort_order form "ascending" or "descending" no The sort order of results.
sort_on form "keyword" or "occurrence" no The field to sort on.

PATCH /@keywords (or /path/to/page/@keywords)

Parameter Source Type / Values Required Default Description
idx form string no "Subject" The keyword index to query.
new_keyword body string yes The name of the keyword to be created.
old_keywords body list[string] yes The old keywords to be deleted.

DELETE /@keywords (or /path/to/page/@keywords)

Parameter Source Type / Values Required Default Description
idx form string no "Subject" The keyword index to query.
items body list yes The name of the keywords to be deleted.

GET /@keywordIndex

No parameters.

Utility

Getting the utility.

from kitconcept.keywordmanager.interfaces import IKeywordManager
from zope.component import getUtility

km = getUtility(IKeywordManager)

Contributing 🐛

Prerequisites ✅

Installation 🔧

  1. Clone this repository.

    git clone git@github.com:kitconcept/kitconcept-keywordmanager.git
    cd kitconcept-keywordmanager/backend
    
  2. Install this code base.

    make install
    

License

The project is licensed under GPLv2.

Credits and acknowledgements 🙏

Generated using Cookieplone (2.0.0a3) and cookieplone-templates (cda10db) on 2026-05-29 11:44:37.855709. A special thanks to all contributors and supporters!

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kitconcept_keywordmanager-1.0.0a2.tar.gz (80.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kitconcept_keywordmanager-1.0.0a2-py3-none-any.whl (90.2 kB view details)

Uploaded Python 3

File details

Details for the file kitconcept_keywordmanager-1.0.0a2.tar.gz.

File metadata

  • Download URL: kitconcept_keywordmanager-1.0.0a2.tar.gz
  • Upload date:
  • Size: 80.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for kitconcept_keywordmanager-1.0.0a2.tar.gz
Algorithm Hash digest
SHA256 67581361f0fe7a3c52ebaff5b43e480bc84043f1811318f628f566da629634f1
MD5 4630430a4a8e1c68ad5858853c3607b4
BLAKE2b-256 45e7e269a90a13270a99503c89470086f2d7b229567c81385bbf71f98d99efc5

See more details on using hashes here.

File details

Details for the file kitconcept_keywordmanager-1.0.0a2-py3-none-any.whl.

File metadata

  • Download URL: kitconcept_keywordmanager-1.0.0a2-py3-none-any.whl
  • Upload date:
  • Size: 90.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for kitconcept_keywordmanager-1.0.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 181fc60b60c98bf1169ea475fc499b259eed7fa21d6cf9ee8e02f53dd408b4c5
MD5 f2edbc9151e98bdc6f50e2ea6cb628f2
BLAKE2b-256 8c3b01910fc48d121eb7a46020d5a9cc031fb26950440eb818c45166a4b68158

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page