Eliminate Python dependency: embed frontend assets in odoo-go

- Copy all OWL frontend assets (JS/CSS/XML/fonts/images) into frontend/
  directory (2925 files, 43MB) — no more runtime reads from Python Odoo
- Replace OdooAddonsPath config with FrontendDir pointing to local frontend/
- Rewire bundle.go, static.go, templates.go, webclient.go to read from
  frontend/ instead of external Python Odoo addons directory
- Auto-detect frontend/ and build/ dirs relative to binary in main.go
- Delete obsolete Python helper scripts (tools/*.py)

The Go server is now fully self-contained: single binary + frontend/ folder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marc
2026-03-31 23:09:12 +02:00
parent 0ed29fe2fd
commit 8741282322
2933 changed files with 280644 additions and 264 deletions

View File

@@ -0,0 +1,5 @@
declare module "models" {
export interface Thread {
collaborator_ids: ResPartner[];
}
}

View File

@@ -0,0 +1,34 @@
import { FollowerList } from "@mail/core/web/follower_list";
import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
import { _t } from "@web/core/l10n/translation";
import { useService } from "@web/core/utils/hooks";
import { patch } from "@web/core/utils/patch";
const followerListPatch = {
setup() {
super.setup();
this.dialogService = useService("dialog");
},
/**
* @param {MouseEvent} ev
* @param {import("models").Follower} follower
*/
async onClickRemove(ev, follower) {
if (follower.partner_id.in(follower.thread.collaborator_ids)) {
this.dialogService.add(ConfirmationDialog, {
title: _t("Remove Collaborator"),
body: _t(
"This follower is currently a project collaborator. Removing them will revoke their portal access to the project. Are you sure you want to proceed?"
),
confirmLabel: _t("Remove Collaborator"),
cancelLabel: _t("Discard"),
confirm: () => super.onClickRemove(ev, follower),
cancel: () => {},
});
} else {
super.onClickRemove(ev, follower);
}
},
};
patch(FollowerList.prototype, followerListPatch);

View File

@@ -0,0 +1,13 @@
import { Thread } from "@mail/core/common/thread_model";
import { fields } from "@mail/model/misc";
import { patch } from "@web/core/utils/patch";
/** @type {import("models").Thread} */
const threadPatch = {
setup() {
super.setup();
this.collaborator_ids = fields.Many("res.partner");
},
};
patch(Thread.prototype, threadPatch);