Skip to content

PyVELM v1.1.0

Release date: 2026-06-09

Minor release after v1.0.1: fluent manifests and view builders, models.Model, Eloquent-style query builder, Vellum removal, bundled model packaging, and Odoo-style technical file naming across bundled and example modules.


Highlights

Fluent module manifests

from pyvelm.manifest import Manifest

manifest = (
    Manifest.make("partners")
    .version(0, 4, 0)
    .depends("base")
    .data("views/partner.py", "views/menu.py")
    .summary("Companies, contacts, and the partner directory.")
)

Legacy NAME / VERSION constants still load. pyvelm db migrate and scaffolders patch .version(...) on fluent manifests.

See Modules → The manifest.

Fluent view and menu builders

from pyvelm.builders import Field, FormView, ListView, Menus, ViewsData

views_data = (
    ViewsData.make()
    .views(
        ListView.make("partner.list")
        .model("res.partner")
        .columns(["name", Field.make("active").toggle()]),
    )
    .menus(
        Menus("partners").group("business", "Business").children([
            Menus("partners").item("business.partners", "Partners").view("partner.list"),
        ]),
    )
)

Legacy list_view / field helpers remain supported. make:view scaffolds emit the fluent style.

See Building UIs.

models.Model and query builder

from pyvelm import Char, models

class Partner(models.Model):
    _inherit = "res.partner"
    vip_note = Char()

posts = (
    env["blog.post"]
    .query()
    .where("views", ">", 100)
    .order_by("published_at", "desc")
    .limit(20)
    .get()
)

env.query("model") is equivalent. Queries delegate to search() (ACL + record rules).

See Declaring models and pyvelm.query.

Vellum removed

The optional Vellum ORM mixin, bundled vellum module, vellum_demo example, and --vellum scaffold flag are gone. Mass assignment (_fillable / _guarded) remains in pyvelm.mass_assignment for HTTP form writes.

Bundled models as proper modules

Stage 6 models (ir.actions.server, ir.cron, mail.message, etc.) are defined under pyvelm/modules/*/models/ with thin package-root re-exports for backward compatibility. Bundled and example models use PascalCase classes and res_partner.py-style filenames.


Upgrade

pip install -U "pyvelm==1.1.0"
pyvelm db migrate
pyvelm make:stubs    # refresh IDE literals after view/model renames

Review custom modules that used Vellum or legacy-only manifest constants; migrate to Manifest.make() and ViewsData.make() when convenient (legacy forms still load).