命令行界面 (CLI)

CLI command-line interface 提供多种与 Odoo 相关的功能。您可以将其用于 run the serverlaunch Odoo as a Python console environmentscaffold an Odoo modulepopulate a databasecount the number of lines of code

重要

用于调用 CLI 的命令取决于您安装 Odoo 的方式。在下面的示例中,我们假设您是 running Odoo from source 且具有 odoo-bin 文件。如果您安装了 Odoo from a distribution package 或使用 Docker,则必须调整该命令。

  1. 导航到您下载 Odoo Community 源文件的目录的根目录。

  2. 使用 ./odoo-bin 运行所有 CLI 命令

版本

-h, --help

它可以与任何可用命令结合使用,并显示当前命令的选项。

如果未使用命令,它将按照 help 命令 below 执行操作。

--version

显示 Odoo 版本,例如“Odoo 服务器 19.0”

小技巧

您可以通过运行以下命令在 shell 中启用自动完成功能

COMMANDS=$(odoo-bin --help | sed -e "s/^    \([^ ]\+\).*$/ \1/gp;d" | xargs)
echo "complete -W '$COMMANDS' odoo-bin" >> ~/.bash_completion

help - 显示可用命令

此命令显示 Odoo 的所有可用命令。

它没有选项。

server - 运行服务器

该命令是默认命令:您可以省略它,但无论如何都会选择它。

-d <database>, --database <database>

安装或更新模块时使用的数据库。提供逗号分隔的列表限制对列表中提供的数据库的访问。

有关高级数据库选项,请查看 below

-i <modules>, --init <modules>

运行服务器之前要安装的模块的逗号分隔列表(需要 -d)。

-u <modules>, --update <modules>

在运行服务器之前要更新的以逗号分隔的模块列表。对所有模块使用“all”。 (需要 -d)。

--reinit <modules>

在启动服务器之前要重新初始化的以逗号分隔的模块列表。 (需要 -d)。

重新初始化类似于简单升级,无需执行任何升级脚本。它加载``init`` mode instead of update mode, primarily affecting records marked as ``’noupdate’``中的数据。所有直接或间接依赖于指定模块的模块也将被重新初始化。

此选项仅用于调试或开发目的。 请勿将其与生产数据库一起使用。

--addons-path <directories>

存储模块的目录的逗号分隔列表。扫描这些目录中的模块。

--upgrade-path <upgrade_path>

以逗号分隔的目录列表,从中加载其他升级脚本。

--pre-upgrade-scripts <pre_upgrade_scripts>

以逗号分隔的升级脚本路径列表。当请求升级任何模块时,这些脚本会在加载基本模块之前运行。这对于在主要升级后的自定义模块升级期间执行某些操作非常有用。

--load <modules>

要加载的服务器范围模块列表。这些模块应该提供不一定与特定数据库相关的功能。这与安装时始终绑定到特定数据库的模块(即大多数 Odoo 插件)形成鲜明对比。默认为“base,web”。

-c <config>, --config <config>

到备用 configuration file 的路径。如果未定义,Odoo 将检查 ODOO_RC 环境变量和默认位置 $HOME/.odoorc。请参阅配置文件部分 below

-D <data-dir-path>, --data-dir <data-dir-path>

存储 Odoo 数据的目录路径(例如文件存储、会话)。如果未指定,Odoo 将回退到预定义路径。在 Unix 系统上,它在 $XDG_DATA_HOME 环境变量或 ~/.local/share/Odoo/var/lib/Odoo 中定义。

-s, --save

将服务器配置保存到当前配置文件(默认为 $HOME/.odoorc,可以使用 -c 覆盖)。

--with-demo

在新数据库中安装演示数据。

--without-demo

不要在新数据库中安装演示数据,也不在使用演示数据的数据库中安装新模块时,这是默认设置。

--skip-auto-install

当请求安装新模块时跳过自动安装模块。该选项对于开发很有用。它用于检查安装的模块是否不间接依赖于自动安装的模块。

--pidfile=<pidfile>

将存储服务器 pid 的文件的路径

--stop-after-init

初始化后停止服务器。

--geoip-city-db <path>

GeoIP City 数据库文件的绝对路径。

--geoip-country-db <path>

GeoIP 国家/地区数据库文件的绝对路径。

测试

--test-enable

安装模块后运行测试

--test-file <file>

运行 python 测试文件

--test-tags [-][tag][/module][:class][.method]

以逗号分隔的规范列表,用于过滤要执行的测试。如果设置则启用单元测试。

示例:--test-tags :TestClass.test_func,/test_module,external

  • - 指定我们是否要包含或排除与此规范匹配的测试。

  • 该标签将匹配使用 tagged() 装饰器添加到类上的标签(所有 test classes 都有 standardat_install 标签,直到显式删除为止,请参阅装饰器文档)。

  • * 将匹配所有标签。

  • 如果在包含模式下省略标记,则其值为 standard

  • 如果在排除模式下省略标记,则其值为 *

  • 模块、类和方法将分别匹配模块名称、测试类名称和测试方法名称。

过滤和执行测试发生两次:在每个模块安装/更新之后以及在模块加载结束时。在每个阶段,测试均按 --test-tags 规范进行过滤,并另外相应地按动态规范 at_installpost_install 进行过滤。

--screenshots

指定 HttpCase.browser_js 测试失败时写入屏幕截图的目录。默认为 /tmp/odoo_tests/db_name/screenshots

--screencasts

启用截屏视频并指定写入截屏视频文件的目录。需要安装“ffmpeg”实用程序才能将帧编码为视频文件。否则,将保留帧而不是视频文件。

数据库

-r <user>, --db_user <user>

数据库用户名,用于连接 PostgreSQL。

-w <password>, --db_password <password>

数据库密码(如果使用 password authentication)。

--db_host <hostname>

数据库服务器的主机

  • Windows 上的“localhost

  • 否则为 UNIX 套接字

--db_port <port>

数据库监听的端口,默认5432

--db_replica_host <hostname>

副本数据库服务器的主机,未设置/为空时禁用

--db_replica_port <port>

副本数据库监听的端口,默认为 --db_port

--db-filter <filter>

隐藏与“<filter>` for the Web UI. The filter is a `正则表达式”不匹配的数据库,并添加以下内容:

  • %h 被发出请求的整个主机名替换。

  • %d is replaced by the subdomain the request is made on, with the exception of www (so domain odoo.com and www.odoo.com both match the database odoo)。

    这些操作区分大小写。添加选项``(?i)`` to match all databases (so domain odoo.com using (?i)%d matches the database Odoo)。

从版本 11 开始,还可以通过使用 –database 参数并指定以逗号分隔的数据库列表来限制对给定数据库侦听的访问

当组合这两个参数时,db-filter 取代逗号分隔的数据库列表来限制数据库列表,而逗号分隔的列表用于执行请求的操作,例如模块升级。

$ odoo-bin --db-filter ^11.*$

限制访问名称以 11 开头的数据库

$ odoo-bin --database 11firstdatabase,11seconddatabase

限制仅访问两个数据库:11firstdatabase 和 11seconddatabase

$ odoo-bin --database 11firstdatabase,11seconddatabase -u base

限制仅访问两个数据库:11firstdatabase 和 11seconddatabase,并更新一个数据库上的基本模块:11firstdatabase。如果数据库 11seconddatabase 不存在,则创建数据库并安装基本模块

$ odoo-bin --db-filter ^11.*$ --database 11firstdatabase,11seconddatabase -u base

限制对名称以 11 开头的数据库的访问,并更新一个数据库上的基本模块:11firstdatabase。如果数据库 11seconddatabase 不存在,则创建数据库并安装基本模块

警告

此选项不会影响 cron 工作人员,如果没有给出 –database,则 cron 工作人员将在每个可用数据库上运行

--db-template <template>

从数据库管理屏幕创建新数据库时,请使用指定的 template database。默认为“template0”。

--pg_path </path/to/postgresql/binaries>

数据库管理器用来转储和恢复数据库的 PostgreSQL 二进制文件的路径。仅当这些二进制文件位于非标准目录中时才必须指定此选项。

--no-database-list

禁止列出系统上可用的数据库的能力

--db_sslmode

控制 Odoo 和 PostgreSQL 之间连接的 SSL 安全性。值应为“disable”、“allow”、“prefer”、“require”、“verify-ca”或“verify-full”之一 默认值为“prefer”

--unaccent

创建新数据库时尝试启用 unaccent 扩展

电子邮件

--email-from <address>

当 Odoo 需要发送邮件时,电子邮件地址用作 <FROM>

--from-filter <address or domain>

定义 SMTP 配置将应用到的电子邮件地址。该字段可以是域名或整个电子邮件地址,也可以保留为空。如果发件人的电子邮件地址与此设置的过滤器不匹配,则将使用两个系统参数的组合来封装电子邮件:mail.default.from and mail.catchall.domain。例如,“管理员”<admin@example.com> =>“管理员”<notifications@mycompany.com>。

--smtp <server>

为了发送邮件而连接的 SMTP 服务器的地址

--smtp-port <port>
--smtp-ssl

如果设置,odoo 应使用 SSL/STARTSSL SMTP 连接

--smtp-user <name>

连接到 SMTP 服务器的用户名

--smtp-password <password>

连接 SMTP 服务器的密码

--smtp-ssl-certificate-filename <path/to/cert.pem>

SSL 证书将用于身份验证。如果设置,则需要 smtp-ssl-private-key

--smtp-ssl-private-key-filename <path/to/key.pem>

SSL 私钥用于身份验证。如果设置,则需要 smtp-ssl-certificate

国际化

--load-language <languages>

指定要加载的翻译的语言(以逗号分隔)

--i18n-overwrite

更新模块或导入 CSV 或 PO 文件时覆盖现有翻译术语。

高级选项

开发者特色

--dev <feature,feature,...,feature>

以逗号分隔的功能列表。仅用于开发目的。不要在生产中使用它。可能的特征是:

  • all:xml、reload、qweb、access 的别名

  • xml:直接从 xml 文件而不是数据库读取 QWeb 模板。一旦模板在数据库中被修改,直到下一次更新/初始化时才会从 xml 文件中读取它。特别是,使用此选项时不会翻译模板。

  • reload:更新 python 文件时重新启动服务器(根据使用的文本编辑器,可能无法检测到)

  • qweb: break in the evaluation of QWeb template when a node contains t-debug='debugger'

  • werkzeug:在出现异常时在前端页面上显示完整的回溯

  • replica:模拟 --db_replica_host 但连接到与 --db_host 相同的数据库服务器,这使得可以测试只读功能,而无需设置复制数据库。

  • access:当导致 403 - Forbidden HTTP 响应时,在 AccessError 旁边记录回溯。

HTTP协议

--no-http

不要启动 HTTP 或长轮询工作程序(仍可能启动 cron 工作程序)

警告

如果设置 --test-enable 则无效,因为测试需要可访问的 HTTP 服务器

--http-interface <interface>

HTTP 服务器侦听的 TCP/IP 地址,默认为“0.0.0.0”(所有地址)

-p <port>
--http-port <port>

HTTP服务器监听的端口,默认为8069。

--gevent-port <port>

多处理或 gevent 模式下 websocket 连接的 TCP 端口,默认为 8072。在默认(线程)模式下不使用。

--proxy-mode

允许使用``X-Forwarded-*`` headers through Werkzeug 的代理支持

它忽略请求中缺少的所有“X-Forwarded-*` headers in case ``X-Forwarded-Host`”。

它始终从 X-Forwarded-For` chain. Configure your web server accordingly using directives such as nginx’s set_real_ip_from 的最后一个条目获取真实 IP,以防链上还有其他必须忽略的可信代理。

成功管理身份验证后的“X-Forwarded-Proto` and X-Forwarded-Host are used to update the request root URL, which in turn is used to update the ``web.base.url`”系统参数。该系统参数用于生成当前数据库的所有链接;请参阅 数据库的 Web 基本 URL

警告

*不得*在反向代理场景之外启用代理模式

--x-sendfile

委托将附件文件提供给静态 Web 服务器,并在流响应上设置“X-Sendfile` (apache) and ``X-Accel-*”(nginx) http 标头。有关 Web 服务器配置,请参阅 :ref:`deploy/streaming

记录

默认情况下,Odoo 显示级别 INFO, WARNING and ERROR. All logs independently of the level are output on stderr 的所有日志记录。可以使用各种选项将日志记录重定向到其他目的地并自定义详细程度。

--logfile <file>

将日志输出发送到指定文件而不是``stderr``. On Unix, the file `可以由外部日志轮换程序<https://docs.python.org/3/library/logging.handlers.html#watchedfilehandler>`_管理,并且在替换时将自动重新打开

--syslog

记录到系统的事件记录器:syslog on unicesthe Event Log on Windows

两者均不可配置

--log-db <dbname>

记录到“ir.logging` model (ir_logging table) of the specified database. The database can be the name of a database in the “current” PostgreSQL, or `a PostgreSQL URI”,例如日志聚合。

--log-handler <handler-spec>

LOGGER:LEVEL,启用模型中的“LOGGER` at the provided LEVEL e.g. odoo.models:DEBUG will enable all logging messages at or above ``DEBUG`”级别。

  • 冒号“:”是必需的

  • 可以省略记录器来配置根(默认)处理程序

  • 如果省略级别,则记录器设置为“INFO

可以重复该选项来配置多个记录器,例如

$ odoo-bin --log-handler :DEBUG --log-handler werkzeug:CRITICAL --log-handler odoo.fields:WARNING
--log-web

启用 HTTP 请求和响应的 DEBUG 日志记录,相当于“--log-handler=odoo.http:DEBUG

--log-sql

启用 SQL 查询的 DEBUG 日志记录,相当于“--log-handler=odoo.sql_db:DEBUG

--log-level <level>

更轻松地在特定记录器上设置预定义级别的快捷方式。 “真实”水平(critical, error, warn, debug) are set on the odoo and werkzeug loggers (except for debug which is only set on odoo)。

Odoo 还提供适用于不同记录器组的调试伪级别:

debug_sql

将 SQL 记录器设置为“debug

相当于``–log-sql``

debug_rpc

设置``odoo`` and HTTP request loggers to debug

相当于``–log-level debug –log-request``

debug_rpc_answer

设置``odoo`` and HTTP request and response loggers to debug

相当于``–log-level debug –log-request –log-response``

注解

如果 --log-level--log-handler 之间发生冲突,则使用后者

多重处理

--workers <count>

如果 count 不为 0(默认值),则启用多处理并设置指定数量的 HTTP 工作线程(处理 HTTP 和 RPC 请求的子进程)。

注解

多处理模式仅适用于基于 Unix 的系统

有多种选择可以限制和回收工人:

--limit-request <limit>

工作线程在回收和重新启动之前将处理的请求数。

默认为 8196

--limit-memory-soft <limit>

每个工作线程允许的最大虚拟内存(以字节为单位)。如果超出限制,worker 将在当前请求结束时被杀死并回收。

默认为 2048MiB (2048*1024*1024B)

--limit-memory-hard <limit>

以字节为单位对虚拟内存进行硬限制,任何超过限制的工作线程将被立即杀死,而不等待当前请求处理结束。

默认为 2560MiB (2560*1024*1024B)

--limit-time-cpu <limit>

防止工作线程对每个请求使用超过 <limit> CPU 秒。如果超过限制,工人就会被杀死。

默认为 60

--limit-time-real <limit>

防止工作线程处理请求的时间超过 <limit> 秒。如果超过限制,工人就会被杀死。

--limit-time-cpu 不同,这是一个“墙上时间”限制,包括例如SQL 查询。

默认为 120

--max-cron-threads <count>

致力于 cron 工作的工人数量。默认为 2。多线程模式下的worker是线程,多处理模式下的worker是进程。

对于多处理模式,这是对 HTTP 工作进程的补充。

--limit-time-worker-cron <limit>

重新启动之前允许 cron 线程/工作线程生存的时间的软限制(以秒为单位)。

设置为 0 以禁用。

默认为 0

配置文件

大多数命令行选项也可以通过配置文件指定。大多数时候,他们使用带有前缀“-` removed and other - are replaced by _ e.g. --db-template becomes ``db_template`”的相似名称。

有些转换与模式不匹配:

默认配置文件是 $HOME/.odoorc,可以使用 --config 覆盖。指定 --save 会将当前配置状态保存回该文件。与命令行相关的配置项在``[options]``部分指定。

这是一个示例文件:

[options]
db_user=odoo
dbfilter=odoo

shell - 打开外壳

Odoo 命令行还允许将 Odoo 作为 Python 控制台环境启动,从而能够与 orm 及其功能直接交互。由于运行 shell 涉及启动服务器,因此配置文件选项确实适用。

$ odoo-bin shell

Example

为所有联系人的姓名添加感叹号:

In [1]: records = env["res.partner"].search([])

In [2]: records
Out[2]: res.partner(14, 26, 33, 21, 10)

In [3]: for partner in records:
   ...:     partner.name = "%s !" % partner.name
   ...:

In [4]: env.cr.commit()

重要

默认情况下,shell 以事务模式运行。这意味着退出 shell 时对数据库所做的任何更改都会回滚。要提交更改,请使用 env.cr.commit()

--shell-file <init_script.py>

指定 shell 启动后要运行的 Python 脚本。覆盖环境变量 PYTHONSTARTUP

--shell-interface (ipython|ptpython|bpython|python)

指定在 shell 模式下使用的首选 REPL。该 shell 启动时已初始化 env 变量,以便能够访问 ORM 和其他 Odoo 模块。

其他资料

环境

db - 管理数据库

此命令允许您通过命令行界面管理数据库。使用子命令指定操作。

对于所有子命令,可以使用以下选项来配置环境:

db init - 初始化数据库

此命令创建一个新数据库并安装 base 模块。您可以指定主要公司的语言和国家/地区。

$ odoo-bin db init <database>
database

要初始化的数据库的名称。

--with-demo

在初始化的数据库中安装演示数据。

--force

如果数据库已存在,请删除该数据库,然后再初始化新数据库。

--country <country_iso_code>

主要公司设置的国家代码

--language <language_code>

实例的默认语言,默认 en_US

--username <password>

新数据库的用户名,默认 admin

--password <password>

新数据库的密码,默认`admin`

db dump - 保存数据库转储

创建转储文件。

$ odoo-bin db dump <database> <dump_path>
database

要转储的数据库的名称。

dump_path

(可选)数据库转储到指定路径。默认情况下,它转储到 stdout

--format <zip | dump>

如果提供,则使用指定的格式转储数据库。支持的格式为 zip (默认)、dump (pg_dump 格式)。

--no-filestore

如果提供,zip 数据库将在没有文件存储的情况下转储

db load - 加载数据库转储

将转储文件加载到 Odoo 数据库中,转储文件可以是 URL。

$ odoo-bin db load <database> <dump_file>
database

(可选)要从转储创建的数据库的名称。如果未提供,则使用不带扩展名的转储文件名。

dump_file

要加载的 .zippg_dump 文件。

-f,--force

如果数据库已存在,请先将其删除,然后再加载新数据库。

-n,--neutralize

恢复数据库后将其中和。

db duplicate - 复制数据库

复制数据库,包括文件存储。

$ odoo-bin db duplicate <source> <target>
source

源数据库的名称。

target

目标数据库的名称。

-n,--neutralize

恢复数据库后,将其中和。

-f,--force

如果目标数据库已存在,请在初始化新数据库之前将其删除。

db rename - 重命名数据库

将数据库从旧名称重命名为新名称。

$ odoo-bin db rename <source> <target>
source

数据库的当前名称。

target

数据库的新名称。

-f,--force

如果目标数据库已存在,请先将其删除,然后再重命名源数据库。

db drop - 删除数据库

$ odoo-bin db drop <database>
database

要删除的数据库的名称。

i18n - 国际化

此命令包含子命令,使您能够在 Odoo 实例上导入或导出国际化文件和设置语言。

对于所有子命令,可以使用以下选项来配置环境:

注解

语言代码必须遵循 XPG (POSIX) 区域设置格式。

要列出可用的代码,您可以通过查询数据库来搜索它们:

$ psql -d <dbname> -c "SELECT iso_code FROM res_lang ORDER BY iso_code"

其他资料

GNU libc Locale Names

Example

$ odoo-bin i18n loadlang -l en         # English (U.S.)
$ odoo-bin i18n loadlang -l es es_AR   # Spanish (Spain, Argentina)
$ odoo-bin i18n loadlang -l sr@latin   # Serbian (Latin)

i18n import - 导入 i18n 文件

此命令导入提供的 .po.csv 格式的翻译文件。默认情况下,仅添加新条目,但您可以选择覆盖现有术语。所有文件必须引用指定的语言。

$ odoo-bin i18n import <files> --overwrite --language <language_code>
files
要导入的文件列表。
允许的扩展名:.po.csv
-l,--language

(必填)文件中翻译的语言代码。

-w,--overwrite

导入时覆盖现有翻译。

i18n export - 导出 i18n 文件

此命令将 Odoo 数据库中模块的现有翻译术语导出为一系列格式:.po.pot.tgz.csv。如果是 .po.pot 文件,它们将在其所属模块的 i18n/ 文件夹下创建。如果指定输出参数,则只能选择一种语言,所有输出都将引用该语言。 .tgz 输出格式使所有输出都存档在单个文件中。

$ odoo-bin i18n export <modules> --languages <language_codes>
modules

您想要从中导出国际化文件的模块列表。

-l,--languages <languages>

您要导出的语言代码列表,模板为 `pot`(默认)。

-o,--output
唯一输出文件的路径,其中包含所有提供的模块的翻译。
允许的扩展名:.po.pot.tgz.csv
如果提供 -,则内容将作为 .po 文件写入标准输出。

当此选项处于活动状态时,仅允许使用一种语言。

i18n loadlang - 加载语言

此命令将一种可用语言加载到 Odoo 数据库中并激活它。

$ odoo-bin i18n loadlang <languages>
languages

要安装的语言的语言代码。

module - 管理模块

此命令包含子命令,使您能够在 Odoo 实例上安装、卸载和升级模块。还有一个命令可以强制将演示数据安装到数据库中。

对于所有子命令,这些选项都可用:

module install - 安装模块

此命令会立即安装所有选定的模块。

在安装模块之前,需要在 PostgreSQL 实例上创建并初始化 Odoo 数据库,例如使用 db init - 初始化数据库 命令。

$ odoo-bin module install <modules>
modules

您要安装的模块列表。

module uninstall - 卸载模块

此命令立即卸载所有选定的模块。

$ odoo-bin module uninstall <modules>
modules

您要卸载的模块列表。

module upgrade - 升级模块

此命令立即升级所有选定的模块。

$ odoo-bin module upgrade <modules>
modules

您要升级的模块列表。对所有已安装的模块使用“base` or ``all`”。

--outdated

仅更新磁盘上具有较新版本的模块。如果为“all` is used as ``modules`”参数,则这适用于所有已安装的模块。

module forcedemo - 强制安装演示数据

此命令强制安装 Demo Data

警告

一旦安装,就无法撤消它,因此您可能需要先使用命令 db dump 保存数据库的备份

该命令没有其他选项。

neutralize - 中和数据库

Odoo 命令行还允许中和数据库。该命令必须与数据库选项一起运行。

$ odoo-bin --addons-path <PATH,...> neutralize -d <database>
-d <database>, --database <database>

指定您想要中和的数据库名称。

--stdout

输出中和SQL而不是应用它

其他资料

中立化数据库

scaffold - 搭建模块

脚手架是自动创建骨架结构,以简化引导(新模块,在 Odoo 的情况下)。虽然不是必需的,但它避免了设置基本结构和查找所有起始要求的乏味。

可以通过 odoo-bin scaffold 子命令使用脚手架。

$ odoo-bin scaffold my_module /addons/
name (required)

要创建的模块的名称,可以以各种方式修改以生成编程名称(例如模块目录名称、模型名称等)

destination (default=current directory)

创建新模块的目录,默认为当前目录

-t <template>

模板目录,文件通过 jinja2 传递,然后复制到 destination 目录

这将在目录 /addons/ 中创建模块 my_module

populate - 填充数据库

Odoo Populate 允许复制给定数据库中的现有数据。当需要大型表时,这可以用于测试和基准测试。复制过程引入了一些字段的变化,以遵守 UNIQUE 约束等。它还遵循 x2Many 关系。

$ odoo-bin populate -d  my_database --models res.partner,account.move --factors 1000
-d <database>

要填充的数据库的名称

--models <models>

要填充的模型列表。出现两次的模型将仅填充一次。

--factors <factors>

填充因素列表。如果模型缺少某个因子,则将使用列表中的最后一个因子。

--sep <separator>

用于生成记录名称的分隔符

cloc - 计算代码行数

Odoo Cloc 是一个统计用 Python、Javascript、CSS、SCSS 或 XML 编写的相关代码行数的工具。这可以用作额外模块的定价维护的粗略指标。

$ odoo-bin cloc -c config.conf -d my_database
-d <database>, --database <database>
处理安装在提供的数据库上的所有额外模块的代码,以及在提供的数据库中手动创建的所有服务器操作和计算字段的代码。
需要 --addons-path 选项来指定模块文件夹的路径。
如果与 --path 组合,计数将是两个选项结果的总和(可能有重叠)。至少需要这两个选项之一来指定要处理的代码。
$ odoo-bin cloc --addons-path=addons -d my_database
-p <path>, --path <path>
处理提供的路径中的文件。
如果与 --database 组合,计数将是两个选项结果的总和(可能有重叠)。至少需要这两个选项之一来指定要处理的代码。
$ odoo-bin cloc -p addons/account

通过重复该选项可以提供多个路径。

$ odoo-bin cloc -p addons/account -p addons/sale

其他资料

--addons-path <directories>
存储模块的目录的逗号分隔列表。扫描这些目录中的模块。
如果使用 --database 选项,则为必需。
-c <directories>

指定用于代替 --addons-path 选项的配置文件。

-v, --verbose

显示每个文件的行数详细信息。

已处理的文件

使用 --database 选项

Odoo Cloc 计算给定数据库中额外安装模块的每个文件中的行数。此外,它还统计直接在数据库中创建或导入的服务器操作和自定义计算字段的 Python 行数。最后,它计算 Javascript、CSS 和 SCSS 文件的代码行数,以及导入模块的 QWeb 视图的代码行数。

默认情况下,某些文件被排除在计数之外:

  • 清单(__manifest__.py__openerp__.py

  • 文件夹 static/lib 的内容

  • 文件夹 testsstatic/tests 中定义的测试

  • 文件夹 migrationsupgrades 中定义的迁移脚本

  • 在清单的“demo` or ``demo_xml`”部分中声明的 XML 文件

对于特殊情况,可以为每个模块定义 Odoo Cloc 应忽略的文件列表。这是由清单的“cloc_exclude”条目指定的:

"cloc_exclude": [
    "lib/common.py", # exclude a single file
    "data/*.xml",    # exclude all XML files in a specific folder
    "example/**/*",  # exclude all files in a folder hierarchy recursively
    "**/*.scss",     # exclude all scss file from the module
]
模式“**/*”可用于忽略整个模块。这对于将模块排除在维护服务成本之外非常有用。
有关模式语法的更多信息,请参阅 glob

使用 --path 选项

如果给定文件夹中存在清单文件,则此方法的工作方式与 –database option 相同。否则,它会计算所有文件。

识别额外模块

为了区分标准模块和额外模块,Odoo Cloc 使用以下启发式:位于与 base, web or web_enterprise 标准模块相同的父目录中的模块(真实文件系统路径,在符号链接之后)被视为标准模块。其他模块被视为额外模块。

错误处理

Odoo Cloc 无法对某些文件进行计数。这些文件在输出的末尾报告。

超出最大文件大小

Odoo Cloc 拒绝任何大于 25MB 的文件。通常,源文件小于 1 MB。如果文件被拒绝,可能是:

  • 生成的 XML 文件包含大量数据。它应该被排除在清单中。

  • 应放置在 static/lib 文件夹中的 JavaScript 库。

语法错误

Odoo Cloc 无法计算存在语法问题的 Python 文件的代码行数。如果额外的模块包含此类文件,则应修复它们以允许模块加载。如果模块在存在这些文件的情况下仍能工作,则它们可能未加载,因此应从模块中删除,或者至少通过“cloc_exclude”排除在清单中。

obfuscate - 混淆数据库

此命令提供了一种快速简便的方法来混淆 Odoo 实例中的某些数据,主要用于教学目的或为支持团队制作快速视频,帮助技术人员避免泄露敏感信息。

警告

必须谨慎使用此命令,因为它不被认为是在传输给第三方之前完全匿名化数据的安全方法。图像、PDF 附件、金额以及许多其他信息可能不会被混淆并导致敏感信息泄露。在共享数据之前需要进行彻底的审查,以确保没有敏感信息被泄露。

混淆是对称的,因此可以使用相同的密码对内容进行解密。

server 命令可用的所有配置也可在此处使用。

$ odoo-bin obfuscate --pwd=<password>
--pwd <password>

(必需)将用于对称混淆内容的密码。

--unobfuscate

如果你想取消混淆而不是混淆。

--fields <fields>

要混淆/取消混淆的 table.column 条目的逗号分隔列表。

--file <file>

包含要混淆/取消混淆的 table.column 条目列表的文件。

--exclude

不混淆/取消混淆的 table.column 条目的逗号分隔列表。

--allfields

仅当选择 --unobfuscate 时使用。

尝试取消所有字段的混淆。它比手动指定字段慢。

--vacuum

仅当选择 --unobfuscate 时使用。

解混淆后,彻底清除混淆表并回收未使用的磁盘空间。

--pertablecommit

混淆后,每个表提交一次。

它避免了可能会超时或在错误后面临回滚的大事务。

-y,--yes

不要要求手动确认。

仅当您确定不会在未经审查的情况下将数据库共享给第三方而泄露敏感信息时才使用。

deploy - 远程部署模块

此命令将模块上传到远程 Odoo 服务器并安装它。它比手动连接到远程服务器更简单,并且不需要完全访问托管 Odoo 实例的计算机,只需要 Odoo 管理凭据。

$ odoo-bin deploy <path> <url> --db <dbname> --login <login> --password <password>

注解

先决条件:

  • 服务器必须安装模块 base_import_module

  • 使用 --login 选项选择的用户必须具有管理权限。

path

待部署模块的路径

url

(可选)必须部署模块的服务器的 url(默认 http://localhost:8069

db <dbname>

数据库名称(如果服务器不使用 --db-filter 选项)

--login <username>

具有管理员权限的用户名(默认 admin

--password <password>

具有管理员权限的用户的密码(默认`admin`)

--verify-ssl

验证服务器的SSL证书,以确保目标实例是合法的。

--force

如果模块已安装,请重新初始化该模块。它将更新 noupdate="1" 记录。

upgrade_code - 重写源代码

此命令使用 odoo/upgrade_code 文件夹中的脚本重写整个源代码。它用于在处理大型代码迁移和转发端口时执行繁重的工作。

注解

所有脚本都在尽最大努力迁移源代码,但它们并不是灵丹妙药。

它接受 --addons-path 选项。

$ odoo-bin upgrade_code --from 18.0 --to 19.0 --dry-run
--script <path>

运行单个脚本

--from <version>

运行从此版本开始的所有脚本

--to <version>

--from 一起使用。运行此版本之前的所有脚本。默认值为 odoo.release.version

--glob <glob>

过滤要重写的文件,默认是每个文件(**/*

--dry-run

列出将被重写的文件,但不应用更改

代码升级脚本

这些脚本必须命名为 {version}-{name}.py,并且必须公开一个 upgrade 函数,该函数采用单个 file_manager 参数并且没有返回值。

file_manager 参数是 files 的序列,它有 3 个属性和一些辅助方法:

  • path:文件在文件系统上所在的 pathlib.Path

  • addon:文件所属的插件。

  • content:文件的可重写内容(惰性)。

  • print_progress(current, total):输出当前进度。

Example

def upgrade(file_manager):
    files = (file for file in file_manager if file.path.suffix == '.py')
    for fileno, file in enumerate(files, start=1):
        file.content = file.content.replace(..., ...)
        file_manager.print_progress(fileno, len(files))