{"id":21651,"library":"openedx-filters","title":"Open edX Filters","description":"Open edX Filters implement the Hooks Extensions Framework (OEP-50), allowing third-party plugins to hook into and modify Open edX platform behavior. Current version is 3.1.0, requiring Python >=3.12. The library is actively maintained by the Open edX community with regular releases.","status":"active","version":"3.1.0","language":"python","source_language":"en","source_url":"https://github.com/openedx/openedx-filters","tags":["openedx","filters","hooks","plugins","OEP-50"],"install":[{"cmd":"pip install openedx-filters","lang":"bash","label":"PyPI"}],"dependencies":[],"imports":[{"note":"PipelineData is a top-level export.","wrong":"from openedx_filters.pipeline import PipelineData","symbol":"PipelineData","correct":"from openedx_filters import PipelineData"},{"note":"ToolImplementationError is a top-level export.","wrong":"from openedx_filters.errors import ToolImplementationError","symbol":"ToolImplementationError","correct":"from openedx_filters import ToolImplementationError"},{"note":"Filter classes are in submodules.","wrong":"from openedx_filters import AccountSettingsReadOnlyFieldsRequested","symbol":"AccountSettingsReadOnlyFieldsRequested","correct":"from openedx_filters.learning.filters import AccountSettingsReadOnlyFieldsRequested"}],"quickstart":{"code":"import openedx_filters\nfrom openedx_filters import PipelineData, ToolImplementationError\n\n# Define a simple filter function that adds data\ndef my_filter(data, **kwargs):\n    data['extra'] = 'added by filter'\n    return PipelineData(data)\n\n# Register the filter (typically in your plugin's app config)\n# This assumes the filter is already defined in the Open edX pipeline.\nprint(\"Filter registered. See official docs for full example.\")","lang":"python","description":"Minimal example showing how to import key symbols. Full integration requires Django app configuration and settings."},"warnings":[{"fix":"Upgrade your environment to Python 3.12 or later.","message":"Python 3.12 minimum: version 3.0.0 dropped support for Python 3.8, 3.9, 3.10, and 3.11.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Refer to the official filter list at https://github.com/openedx/openedx-filters/tree/main/openedx_filters/learning/filters.","message":"Filter class names have changed over time; always use the latest naming as per the docs for your version.","severity":"gotcha","affected_versions":"all"},{"fix":"Always use PipelineData(data_dict) and access via data.your_key or data['your_key'] (it supports both).","message":"The PipelineData object is not a dict; treating it as one may break attribute access.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Upgrade to latest: pip install --upgrade openedx-filters","cause":"Outdated version of openedx-filters (<1.0.0) where PipelineData might not exist or is in a different module.","error":"ImportError: cannot import name 'PipelineData' from 'openedx_filters'"},{"fix":"Upgrade to 2.0.0+ or import filters from the correct path for your version.","cause":"Using an older version of openedx-filters (<2.0.0) that didn't have the 'learning' subpackage.","error":"ModuleNotFoundError: No module named 'openedx_filters.learning'"},{"fix":"Convert to dict first: dict(data).update(...) then return PipelineData(new_dict).","cause":"Trying to use dict methods like .update() on a PipelineData object, which does not directly support it.","error":"AttributeError: 'PipelineData' object has no attribute 'update'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}