{"id":8300,"library":"manifestoo-core","title":"Manifestoo Core","description":"Manifestoo Core is a Python library designed to reason about Odoo addons manifests. It provides functionalities to detect the Odoo series from an addon's version, offer information about core Odoo Community Edition and Enterprise Edition addons for various Odoo versions, and convert Odoo manifest metadata into Python Packaging Metadata. The library is actively maintained with frequent updates, currently at version 1.15.1, often aligned with new Odoo versions and manifest specifications.","status":"active","version":"1.15.1","language":"en","source_language":"en","source_url":"https://github.com/acsone/manifestoo-core","tags":["Odoo","manifests","addons","parsing","metadata","packaging"],"install":[{"cmd":"pip install manifestoo-core","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"Requires Python 3.7 or newer.","package":"python","optional":false}],"imports":[{"symbol":"Addon","correct":"from manifestoo_core.addon import Addon"},{"symbol":"OdooSeries","correct":"from manifestoo_core.odoo_series import OdooSeries"},{"symbol":"get_core_addons, is_core_addon, get_core_addon_license","correct":"from manifestoo_core.core_addons import get_core_addons, is_core_addon, get_core_addon_license"},{"symbol":"metadata_from_addon_dir, MetadataOptions","correct":"from manifestoo_core.metadata import metadata_from_addon_dir, MetadataOptions"}],"quickstart":{"code":"from pathlib import Path\nfrom manifestoo_core.addon import Addon, AddonNotFound\nfrom manifestoo_core.odoo_series import OdooEdition, OdooSeries\nfrom manifestoo_core.core_addons import get_core_addons, is_core_addon, get_core_addon_license\nfrom manifestoo_core.metadata import metadata_from_addon_dir, MetadataOptions\nimport os\n\n# Create a dummy addon directory for demonstration\naddon_path = Path(\"./my_test_addon\")\naddon_path.mkdir(exist_ok=True)\nmanifest_content = '{\"name\": \"My Test Addon\", \"version\": \"16.0.1.0.0\", \"depends\": [\"base\", \"sale\"], \"license\": \"LGPL-3\"}'\n(addon_path / \"__manifest__.py\").write_text(manifest_content)\n\n# Example 1: Parse an addon manifest\ntry:\n    addon = Addon.from_addon_dir(addon_path)\n    print(f\"Addon Name: {addon.name}\")\n    print(f\"Addon Version: {addon.version}\")\n    print(f\"Detected Odoo Series: {addon.odoo_series}\")\n    print(f\"Dependencies: {addon.depends}\")\nexcept AddonNotFound:\n    print(f\"No valid Odoo addon found at {addon_path}\")\n\n# Example 2: Check core Odoo addons\nseries = OdooSeries.from_str(\"16.0\")\ncore_addons = get_core_addons(series, OdooEdition.CE)\nprint(f\"\\nSample core CE addons for {series.value}: {list(core_addons)[:3]}\")\nprint(f\"'sale' is core for {series.value} CE: {is_core_addon('sale', series, OdooEdition.CE)}\")\n\n# Example 3: Generate Python Package Metadata\nmetadata = metadata_from_addon_dir(addon_path)\nprint(f\"\\nGenerated Package Name: {metadata['Name']}\")\nprint(f\"Generated Package Version: {metadata['Version']}\")\n\n# Clean up dummy addon\n(addon_path / \"__manifest__.py\").unlink()\naddon_path.rmdir()","lang":"python","description":"This quickstart demonstrates how to parse an Odoo addon's manifest, query information about core Odoo addons for a specific series and edition, and generate Python package metadata from an Odoo addon directory. It creates a temporary dummy addon for illustration."},"warnings":[{"fix":"Upgrade your Python environment to 3.7 or newer, or pin `manifestoo-core<1.9`.","message":"Support for Python 3.6 was dropped in `manifestoo-core` v1.9. Users on Python 3.6 will encounter `ModuleNotFoundError` or other compatibility issues.","severity":"breaking","affected_versions":">=1.9"},{"fix":"Ensure you are using `manifestoo-core` v1.13 or newer when working with Odoo 19 manifests. Always refer to the Odoo documentation for specific manifest changes between Odoo versions.","message":"Odoo 19 introduced changes to manifest structures, such as new keys in `external_dependencies` (e.g., `apt`). While `manifestoo-core` v1.13 and newer support these, older versions might not correctly parse Odoo 19 manifests or may yield incomplete data.","severity":"gotcha","affected_versions":"<1.13"},{"fix":"Review the `MetadataOptions` documentation when generating package metadata, especially if your Odoo addons have specific external or additional dependencies not covered by default.","message":"The `MetadataOptions` class gained an `additional_dependencies` option in v1.15. If you are converting Odoo manifests to Python Packaging Metadata and require custom dependency handling, this option might be relevant.","severity":"gotcha","affected_versions":"<1.15"}],"env_vars":null,"last_verified":"2026-04-16T00:00:00.000Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Verify that the `__manifest__.py` file exists in the directory you are trying to parse and that its content is a valid JSON dictionary as expected by Odoo. Ensure the directory path is correct.","cause":"The specified directory does not contain a valid Odoo addon (e.g., missing `__manifest__.py` file or it's malformed).","error":"manifestoo_core.addon.AddonNotFound: No valid Odoo addon found in directory"},{"fix":"Ensure all Odoo addon manifests processed by `manifestoo-core` contain a valid 'version' key with a string value, e.g., `\"version\": \"16.0.1.0.0\"`.","cause":"This error can occur if an Odoo addon manifest is missing the 'version' key, or if `manifestoo-core` is attempting to process an invalid or incomplete manifest.","error":"TypeError: 'version' keyword argument must be a string, not 'NoneType'"}]}