Skip to content

feat(entrypoints): project the report to Neo4j, count what never resolved, detect odoo - #182

Merged
rahlk merged 1 commit into
mainfrom
fix/issue-177-entrypoints
Sep 5, 2026
Merged

feat(entrypoints): project the report to Neo4j, count what never resolved, detect odoo#182
rahlk merged 1 commit into
mainfrom
fix/issue-177-entrypoints

Conversation

@rahlk

@rahlk rahlk commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Closes #177. Three gaps from one Odoo run:

  • :PyApplication carries entrypoint_frameworks (string[]) and entrypoint_report_json (the whole PyEntrypointReport), always present, so a graph consumer can tell "no entrypoints" from "the pass found nothing". Additive graph-catalog change; schema.neo4j.json regenerated.
  • PyEntrypointReport.unresolved had no writer and read {} on every run. It now counts, per written spelling, the decorators and base classes that neither Jedi nor the module's import table could name.
  • Decorator matching falls back to the module's import table when Jedi cannot resolve the decorator, the way base-class matching already did. from odoo import http plus @http.route matches odoo.http.route with odoo not importable, which is every --no-venv run. odoo joins the shipped rules: @http.route methods (route from the first positional, one or a list; methods from methods=, default GET) and http.Controller subclasses.

Verified on a fixture under --no-venv: Ctl.index detected as odoo.route with route /x, Ctl as odoo.controller, report lists odoo.

Gates: pytest 474 passed, 8 skipped.

…lved, detect odoo

Three gaps from one Odoo run (#177):

- :PyApplication now carries `entrypoint_frameworks` and
  `entrypoint_report_json`, always present, so a graph consumer can tell
  "no entrypoints" from "the pass found nothing". Additive catalog change.
- `PyEntrypointReport.unresolved` had no writer and read `{}` on every run.
  It now counts, per written spelling, the decorators and base classes that
  neither Jedi nor the module's import table could name.
- Decorator matching falls back to the module's import table when Jedi
  cannot resolve the decorator, the way base-class matching already did,
  so `from odoo import http` plus `@http.route` matches `odoo.http.route`
  with odoo not importable (every --no-venv run). `odoo` joins the shipped
  rules: `@http.route` methods and `http.Controller` subclasses.

Closes #177
@rahlk
rahlk force-pushed the fix/issue-177-entrypoints branch from 6c34120 to f9e810d Compare September 5, 2026 23:02
@rahlk
rahlk merged commit b5f0498 into main Sep 5, 2026
@rahlk
rahlk deleted the fix/issue-177-entrypoints branch September 5, 2026 23:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Entrypoint pass detects zero entrypoints in Odoo; PyEntrypointReport is not projected to Neo4j

1 participant