Files
goodie/pkg/tools/config.go
Marc 8741282322 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>
2026-03-31 23:09:12 +02:00

116 lines
2.6 KiB
Go

// Package tools provides configuration and utility functions.
// Mirrors: odoo/tools/config.py
package tools
import (
"fmt"
"os"
"strconv"
)
// Config holds the server configuration.
// Mirrors: odoo/tools/config.py configmanager
type Config struct {
// Database
DBHost string
DBPort int
DBUser string
DBPassword string
DBName string
DBSSLMode string
// Server
HTTPInterface string
HTTPPort int
Workers int
DataDir string
// Modules
AddonsPath []string
FrontendDir string // Directory containing embedded frontend assets (JS/CSS/XML/fonts)
BuildDir string // Directory for compiled assets (SCSS→CSS)
WithoutDemo bool
// Logging
LogLevel string
// Limits
LimitMemorySoft int64
LimitTimeReal int
}
// DefaultConfig returns a configuration with default values.
// Mirrors: odoo/tools/config.py _default_options
func DefaultConfig() *Config {
return &Config{
DBHost: "localhost",
DBPort: 5432,
DBUser: "odoo",
DBPassword: "odoo",
DBName: "odoo",
DBSSLMode: "disable",
HTTPInterface: "0.0.0.0",
HTTPPort: 8069,
Workers: 0,
DataDir: "/var/lib/odoo",
LogLevel: "info",
}
}
// LoadFromEnv overrides config values from environment variables.
// Mirrors: odoo/tools/config.py _env_options (ODOO_* prefix)
func (c *Config) LoadFromEnv() {
if v := os.Getenv("ODOO_DB_HOST"); v != "" {
c.DBHost = v
}
// Also support Docker-style env vars (HOST, USER, PASSWORD)
if v := os.Getenv("HOST"); v != "" {
c.DBHost = v
}
if v := os.Getenv("ODOO_DB_PORT"); v != "" {
if port, err := strconv.Atoi(v); err == nil {
c.DBPort = port
}
}
if v := os.Getenv("ODOO_DB_USER"); v != "" {
c.DBUser = v
}
if v := os.Getenv("USER"); v != "" && os.Getenv("ODOO_DB_USER") == "" {
c.DBUser = v
}
if v := os.Getenv("ODOO_DB_PASSWORD"); v != "" {
c.DBPassword = v
}
if v := os.Getenv("PASSWORD"); v != "" && os.Getenv("ODOO_DB_PASSWORD") == "" {
c.DBPassword = v
}
if v := os.Getenv("ODOO_DB_NAME"); v != "" {
c.DBName = v
}
if v := os.Getenv("ODOO_HTTP_PORT"); v != "" {
if port, err := strconv.Atoi(v); err == nil {
c.HTTPPort = port
}
}
if v := os.Getenv("ODOO_DATA_DIR"); v != "" {
c.DataDir = v
}
if v := os.Getenv("ODOO_LOG_LEVEL"); v != "" {
c.LogLevel = v
}
if v := os.Getenv("ODOO_FRONTEND_DIR"); v != "" {
c.FrontendDir = v
}
if v := os.Getenv("ODOO_BUILD_DIR"); v != "" {
c.BuildDir = v
}
}
// DSN returns the PostgreSQL connection string.
func (c *Config) DSN() string {
return fmt.Sprintf(
"postgres://%s:%s@%s:%d/%s?sslmode=%s",
c.DBUser, c.DBPassword, c.DBHost, c.DBPort, c.DBName, c.DBSSLMode,
)
}