Back to Home

Tryton ERP Development: Part 1

We have come up with a large project to create an ERP system for a manufacturer’s company. As a server · the choice fell on tryton. However · their documentation is pretty bad. On the Internet · I managed ...

Tryton ERP Development: Part 1

  • Tutorial
We have come up with a large project to create an ERP system for a manufacturer’s company. As a server, the choice fell on tryton. However, their documentation is pretty bad. On the Internet, I managed to find official documentation , pieces of code with a description and logs of the irc tryton channel . This information is very small for the development of any system on tryton. To close this gap, it was decided to document the entire development process, especially the pitfalls that had to be faced. So let's get started.

Part 1: Installing tryotnd, query structure, working with the database
Part 2: Structure of methods, working with users and groups, installing modules
Part 3: Working with company modules (company), contractors (party), goods (product) and warehouse (stock )

1. Installing and pre-setting trytond


1.1. Server start

You can install tryton from the repositories, however, this path does not suit us. So go to their repository . trytond - server sources, tryton - gtk client. We will have a web interface (yii) as a client, so we download the trytond server directly . At the moment, the latest version is 3.2.0, and we will consider it.

The server script is in the bin folder and is called trytond. When trying to start, trytond fell out with an error accessing the config file in /etc/trytond.conf. The magic key --help suggested that there is an argument -c (- config) with which you can specify the config file. You have to start the server like this python trytond -с /home/username/trytond_path/etc/trytond.conf.

1.2. DB preparation

The documentation claims support for postgresql, mysql, sqlite. Based on the correspondence of trytond developers in irc, it is better not to use mysql. Accordingly, the choice fell on postgresql. I didn’t have to work with this database before, so I used a small tutorial .

We need to install postgresql, create a user there and be sure to give it rights to create the database:

sudo aptitude install postgresql
sudo su -l postgres
psql
create user tryton with password 'tryton';
alter user tryton createdb;
\q


1.3. Editing trytond.conf

We proceed to edit the config. The first thing we see is an uncommented line jsonrpc = localhost:8000. All documentation uses xml-rpc, although it is not enabled by default. I'm happy with json-rpc, so leave it as it is.

Next comes the database setup. We fill in the relevant data.

db_type = postgresql
db_host = localhost
db_port = 5432
db_user = tryton
db_password = tryton


Set the administrator password trytond admin_passwd = tryton; my trytond refused to create a database with an empty admin password.
Later we will have to work with modules, so we turn on automatic reloading of modules auto_reload = True.
We indicate where to put the logs logfile = /home/username/trytond_path/log/debug.log.

Ultimately, the config looks like this:
trytond.conf
#This file is part of Tryton.  The COPYRIGHT file at the top level of#this repository contains the full copyright notices and license terms.
[options]
# Activate the json-rpc protocol
jsonrpc = localhost:8000#ssl_jsonrpc = False# This is the hostname used when generating tryton URI#hostname_jsonrpc =# Configure the path of json-rpc data#jsondata_path = /var/www/localhost/tryton# Activate the xml-rpc protocol#xmlrpc = *:8069#ssl_xmlrpc = False# Activate the webdav protocol#webdav = *:8080#ssl_webdav = False# This is the hostname used when generating WebDAV URI#hostname_webdav =# Configure the database type# allowed values are postgresql, sqlite, mysql
db_type = postgresql
# Configure the database connection## Note: Only databases owned by db_user will be displayed in the connection dialog## of the Tryton client. db_user must have create permission for new databases## to be able to use automatic database creation with the Tryton client.
db_host = localhost
db_port = 5432
db_user = tryton
db_password = tryton
#db_minconn = 1#db_maxconn = 64# Configure the postgresql path for the executable#pg_path = None# Configure the Tryton server password
admin_passwd = tryton
# Configure the path of the files for the pid and the logs#pidfile = False
logfile = /home/clutcher/projects/erp/log/debug.log
#privatekey = server.pem#certificate = server.pem# Configure the SMTP connection#smtp_server = localhost#smtp_port = 25#smtp_ssl = False#smtp_tls = False#smtp_password = False#smtp_user = False#smtp_default_from_email = False# Configure the path to store attachments and sqlite database#data_path = /var/lib/trytond# Allow to run more than one instance of trytond#multi_server = False# Configure the session timeout (inactivity of the client in sec)#session_timeout = 600# Enable auto-reload of modules if changed
auto_reload = True# Prevent database listing#prevent_dblist = False# Enable cron# cron = True# unoconv connection#unoconv = pipe,name=trytond;urp;StarOffice.ComponentContext# Number of retries on database operational error# retry = 5# Default language code# language = en_US


1.4. Logging

Tryton has several levels of logging (the documentation states DEBUG, INFO, WARNING, ERROR, CRITICAL). The source lines of the logging library found the following lines:

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0


The larger the number, the less detailed the logs. In irc, it flickered that NOTSETit did the most advanced logs, although the documentation did not say a word about it, so I stopped at the level DEBUG.

In order to set the logging level you want to edit trytond / server.py (27 rows) level=logging.INFO.

2. The structure of the request, the API for working with the database, creating the database


We changed the config, now we start the server. I can find a poor description of the server API here , but this is clearly not enough, so we continue to understand further. The network is full of python code to work with the server directly. It looks something like this:

from jsonrpc import ServerProxy
connection = ServerProxy("localhost", "8000", "tryton", verbose=0)
name = "model.ir.model.search"
model_ids = conn.execute(name, [])


After long attempts to run this code, it turned out that jsonrpc is not a standard library from pypi, but its own trytond developers library, which can be picked from the client (not to be confused with trytond / protocols / jsonrpc.py - these are different libraries). We download tryton, unpack, and in the tryton folder we find our treasured jsonrpc.py. Now you can communicate with trytond in python, however, we will have a frontend in php, so we continue to dig further.

2.1. Request Structure

After a long debriefing, we get the first working code (do not forget that the trytond server must be running):

import json
import requests
url = 'http://localhost:8000/'
id = 1
methodname = 'common.db.list'
params = '[]'
request = json.dumps({
                'id': id,
                'method': methodname,
                'params': params,
                })
r = requests.post(url, data=request)
print r.json()


This code is already understandable and it is not difficult to transfer it to the required language (php, Java ...). Now examine this query.

We will deal with the url of the request. All actions with the database are done on url localhost:8000/. To work with the database, we make requests to the url localhost:8000/db_name. It is assumed that the reader is already familiar with json-rpc , so we will not describe the structure of the request.

2.2. API for working with the database

And here is the long-awaited API for working with localhost:8000, which we managed to get from trytond / protocols / dispatcher.py and pieces of code from the irc channel:

Method nameOptionsDescription
common.server.version[]Get server version
common.db.list[]List of existing databases
common.server.login[user_name, user_pass]Logged in (returned id and cookie of the user)
common.db.create[user_id, user_cookie, database_name, password, lang, admin_password]Create DB
common.db.drop[user_id, user_cookie, database_name, password]Delete DB
common.db.dump[user_id, user_cookie, database_name, password]Make a database dump
common.db.restore[user_id, user_cookie, database_name, password, data, update = False] Restore db


Tryton has anonymous and authenticated requests. For example, common.server.version is an anonymous request; it can be executed without logging in to the server. For common.db.create, you can omit the id and cookie, the request will still be executed. For authenticated requests, you must specify the id and cookie.

2.3. DB creation

The next step is to create a database that is necessary for the functioning of trytond (users, caching ...) and an implicit ERP system. The script runs for about a minute:

import json
import requests
url = 'http://localhost:8000/'
id = 2
methodname = 'common.db.create'
params = [None, None, 'tryton', 'tryton', 'ru_RU', 'tryton']
request = json.dumps({
                'id': id,
                'method': methodname,
                'params': params,
                })
r = requests.post(url, data=request)
print r.json()


tryton will create the tables it needs in the database. It should be noted that tryton will not be able to create tables in the existing empty database even if you give the user the appropriate rights. We called the tryton database, so in the future, requests must be made to the address localhost:8000/tryton.

3. trytond methods


Somewhere in the vastness of google groups by tryton I managed to find a method system.server.listMethods.

import json
import requests
url = 'http://localhost:8000/tryton'
id = 3
methodname = 'system.server.listMethods'
params = '[]'
request = json.dumps({
                'id': id,
                'method': methodname,
                'params': params,
                })
r = requests.post(url, data=request)
print r.json()


And finally, we get the long-awaited server response with the names of the methods, some of which are described in the documentation :
Trytond methods
{
«id»: 3,
«result»: [
«model.ir.module.module.config_wizard.done.view_toolbar_get»,
«model.ir.module.module.config_wizard.done.fields_view_get»,
«model.ir.module.module.config_wizard.done.on_change_with»,
«model.ir.module.module.config_wizard.done.pre_validate»,
«model.ir.module.module.config_wizard.done.fields_get»,
«model.ir.module.module.config_wizard.done.default_get»,
«model.ir.model.print_model_graph.start.view_toolbar_get»,
«model.ir.model.print_model_graph.start.fields_view_get»,
«model.ir.model.print_model_graph.start.on_change_with»,
«model.ir.model.print_model_graph.start.pre_validate»,
«model.ir.model.print_model_graph.start.fields_get»,
«model.ir.model.print_model_graph.start.default_get»,
«model.ir.module.module.install_upgrade.start.view_toolbar_get»,
«model.ir.module.module.install_upgrade.start.fields_view_get»,
«model.ir.module.module.install_upgrade.start.on_change_with»,
«model.ir.module.module.install_upgrade.start.pre_validate»,
«model.ir.module.module.install_upgrade.start.fields_get»,
«model.ir.module.module.install_upgrade.start.default_get»,
«model.res.user.login.attempt.pre_validate»,
«model.res.user.login.attempt.fields_get»,
«model.res.user.login.attempt.default_get»,
«model.res.user.login.attempt.on_change_with»,
«model.ir.ui.menu-res.group.pre_validate»,
«model.ir.ui.menu-res.group.fields_get»,
«model.ir.ui.menu-res.group.default_get»,
«model.ir.ui.menu-res.group.on_change_with»,
«model.ir.action.act_window.domain.view_toolbar_get»,
«model.ir.action.act_window.domain.fields_view_get»,
«model.ir.action.act_window.domain.export_data»,
«model.ir.action.act_window.domain.search_read»,
«model.ir.action.act_window.domain.import_data»,
«model.ir.action.act_window.domain.create»,
«model.ir.action.act_window.domain.search»,
«model.ir.action.act_window.domain.on_change_with»,
«model.ir.action.act_window.domain.write»,
«model.ir.action.act_window.domain.read»,
«model.ir.action.act_window.domain.search_count»,
«model.ir.action.act_window.domain.history_revisions»,
«model.ir.action.act_window.domain.pre_validate»,
«model.ir.action.act_window.domain.copy»,
«model.ir.action.act_window.domain.fields_get»,
«model.ir.action.act_window.domain.default_get»,
«model.ir.action.act_window.domain.delete»,
«model.ir.model.access.view_toolbar_get»,
«model.ir.model.access.fields_view_get»,
«model.ir.model.access.export_data»,
«model.ir.model.access.search_read»,
«model.ir.model.access.import_data»,
«model.ir.model.access.create»,
«model.ir.model.access.get_access»,
«model.ir.model.access.search»,
«model.ir.model.access.on_change_with»,
«model.ir.model.access.write»,
«model.ir.model.access.read»,
«model.ir.model.access.search_count»,
«model.ir.model.access.history_revisions»,
«model.ir.model.access.pre_validate»,
«model.ir.model.access.copy»,
«model.ir.model.access.fields_get»,
«model.ir.model.access.default_get»,
«model.ir.model.access.delete»,
«model.ir.ui.view_tree_state.view_toolbar_get»,
«model.ir.ui.view_tree_state.fields_view_get»,
«model.ir.ui.view_tree_state.export_data»,
«model.ir.ui.view_tree_state.search_read»,
«model.ir.ui.view_tree_state.import_data»,
«model.ir.ui.view_tree_state.create»,
«model.ir.ui.view_tree_state.get»,
«model.ir.ui.view_tree_state.search»,
«model.ir.ui.view_tree_state.on_change_with»,
«model.ir.ui.view_tree_state.write»,
«model.ir.ui.view_tree_state.read»,
«model.ir.ui.view_tree_state.search_count»,
«model.ir.ui.view_tree_state.set»,
«model.ir.ui.view_tree_state.history_revisions»,
«model.ir.ui.view_tree_state.pre_validate»,
«model.ir.ui.view_tree_state.copy»,
«model.ir.ui.view_tree_state.fields_get»,
«model.ir.ui.view_tree_state.default_get»,
«model.ir.ui.view_tree_state.delete»,
«model.ir.action.act_window.view_toolbar_get»,
«model.ir.action.act_window.fields_view_get»,
«model.ir.action.act_window.export_data»,
«model.ir.action.act_window.search_read»,
«model.ir.action.act_window.import_data»,
«model.ir.action.act_window.create»,
«model.ir.action.act_window.get»,
«model.ir.action.act_window.search»,
«model.ir.action.act_window.on_change_with»,
«model.ir.action.act_window.write»,
«model.ir.action.act_window.read»,
«model.ir.action.act_window.search_count»,
«model.ir.action.act_window.history_revisions»,
«model.ir.action.act_window.pre_validate»,
«model.ir.action.act_window.copy»,
«model.ir.action.act_window.fields_get»,
«model.ir.action.act_window.default_get»,
«model.ir.action.act_window.delete»,
«model.res.user.config.start.view_toolbar_get»,
«model.res.user.config.start.fields_view_get»,
«model.res.user.config.start.on_change_with»,
«model.res.user.config.start.pre_validate»,
«model.res.user.config.start.fields_get»,
«model.res.user.config.start.default_get»,
«model.ir.module.module.dependency.view_toolbar_get»,
«model.ir.module.module.dependency.fields_view_get»,
«model.ir.module.module.dependency.export_data»,
«model.ir.module.module.dependency.search_read»,
«model.ir.module.module.dependency.import_data»,
«model.ir.module.module.dependency.create»,
«model.ir.module.module.dependency.search»,
«model.ir.module.module.dependency.on_change_with»,
«model.ir.module.module.dependency.write»,
«model.ir.module.module.dependency.read»,
«model.ir.module.module.dependency.search_count»,
«model.ir.module.module.dependency.history_revisions»,
«model.ir.module.module.dependency.pre_validate»,
«model.ir.module.module.dependency.copy»,
«model.ir.module.module.dependency.fields_get»,
«model.ir.module.module.dependency.default_get»,
«model.ir.module.module.dependency.delete»,
«model.ir.module.module.view_toolbar_get»,
«model.ir.module.module.fields_view_get»,
«model.ir.module.module.export_data»,
«model.ir.module.module.search_read»,
«model.ir.module.module.import_data»,
«model.ir.module.module.create»,
«model.ir.module.module.on_write»,
«model.ir.module.module.search»,
«model.ir.module.module.on_change_with»,
«model.ir.module.module.write»,
«model.ir.module.module.read»,
«model.ir.module.module.search_count»,
«model.ir.module.module.history_revisions»,
«model.ir.module.module.pre_validate»,
«model.ir.module.module.copy»,
«model.ir.module.module.fields_get»,
«model.ir.module.module.default_get»,
«model.ir.module.module.delete»,
«model.ir.module.module.upgrade_cancel»,
«model.ir.module.module.upgrade»,
«model.ir.module.module.install»,
«model.ir.module.module.uninstall_cancel»,
«model.ir.module.module.install_cancel»,
«model.ir.module.module.uninstall»,
«model.ir.action-res.group.pre_validate»,
«model.ir.action-res.group.fields_get»,
«model.ir.action-res.group.default_get»,
«model.ir.action-res.group.on_change_with»,
«model.ir.translation.export.result.view_toolbar_get»,
«model.ir.translation.export.result.fields_view_get»,
«model.ir.translation.export.result.on_change_with»,
«model.ir.translation.export.result.pre_validate»,
«model.ir.translation.export.result.fields_get»,
«model.ir.translation.export.result.default_get»,
«model.ir.action.view_toolbar_get»,
«model.ir.action.fields_view_get»,
«model.ir.action.get_action_id»,
«model.ir.action.export_data»,
«model.ir.action.search_read»,
«model.ir.action.import_data»,
«model.ir.action.create»,
«model.ir.action.search»,
«model.ir.action.on_change_with»,
«model.ir.action.write»,
«model.ir.action.read»,
«model.ir.action.search_count»,
«model.ir.action.history_revisions»,
«model.ir.action.pre_validate»,
«model.ir.action.copy»,
«model.ir.action.fields_get»,
«model.ir.action.default_get»,
«model.ir.action.delete»,
«model.ir.translation.set.succeed.view_toolbar_get»,
«model.ir.translation.set.succeed.fields_view_get»,
«model.ir.translation.set.succeed.on_change_with»,
«model.ir.translation.set.succeed.pre_validate»,
«model.ir.translation.set.succeed.fields_get»,
«model.ir.translation.set.succeed.default_get»,
«model.ir.property.view_toolbar_get»,
«model.ir.property.fields_view_get»,
«model.ir.property.export_data»,
«model.ir.property.search_read»,
«model.ir.property.import_data»,
«model.ir.property.create»,
«model.ir.property.search»,
«model.ir.property.on_change_with»,
«model.ir.property.write»,
«model.ir.property.read»,
«model.ir.property.search_count»,
«model.ir.property.history_revisions»,
«model.ir.property.pre_validate»,
«model.ir.property.models_get»,
«model.ir.property.copy»,
«model.ir.property.fields_get»,
«model.ir.property.default_get»,
«model.ir.property.delete»,
«model.ir.rule.group-res.group.pre_validate»,
«model.ir.rule.group-res.group.fields_get»,
«model.ir.rule.group-res.group.default_get»,
«model.ir.rule.group-res.group.on_change_with»,
«model.ir.ui.view_search.view_toolbar_get»,
«model.ir.ui.view_search.fields_view_get»,
«model.ir.ui.view_search.get_search»,
«model.ir.ui.view_search.export_data»,
«model.ir.ui.view_search.search_read»,
«model.ir.ui.view_search.import_data»,
«model.ir.ui.view_search.create»,
«model.ir.ui.view_search.search»,
«model.ir.ui.view_search.on_change_with»,
«model.ir.ui.view_search.write»,
«model.ir.ui.view_search.read»,
«model.ir.ui.view_search.search_count»,
«model.ir.ui.view_search.history_revisions»,
«model.ir.ui.view_search.pre_validate»,
«model.ir.ui.view_search.copy»,
«model.ir.ui.view_search.fields_get»,
«model.ir.ui.view_search.default_get»,
«model.ir.ui.view_search.delete»,
«model.ir.module.module.config_wizard.first.view_toolbar_get»,
«model.ir.module.module.config_wizard.first.fields_view_get»,
«model.ir.module.module.config_wizard.first.on_change_with»,
«model.ir.module.module.config_wizard.first.pre_validate»,
«model.ir.module.module.config_wizard.first.fields_get»,
«model.ir.module.module.config_wizard.first.default_get»,
«model.ir.action.url.view_toolbar_get»,
«model.ir.action.url.fields_view_get»,
«model.ir.action.url.export_data»,
«model.ir.action.url.search_read»,
«model.ir.action.url.import_data»,
«model.ir.action.url.create»,
«model.ir.action.url.search»,
«model.ir.action.url.on_change_with»,
«model.ir.action.url.write»,
«model.ir.action.url.read»,
«model.ir.action.url.search_count»,
«model.ir.action.url.history_revisions»,
«model.ir.action.url.pre_validate»,
«model.ir.action.url.copy»,
«model.ir.action.url.fields_get»,
«model.ir.action.url.default_get»,
«model.ir.action.url.delete»,
«model.ir.action.act_window.view.view_toolbar_get»,
«model.ir.action.act_window.view.fields_view_get»,
«model.ir.action.act_window.view.export_data»,
«model.ir.action.act_window.view.search_read»,
«model.ir.action.act_window.view.import_data»,
«model.ir.action.act_window.view.create»,
«model.ir.action.act_window.view.search»,
«model.ir.action.act_window.view.on_change_with»,
«model.ir.action.act_window.view.write»,
«model.ir.action.act_window.view.read»,
«model.ir.action.act_window.view.search_count»,
«model.ir.action.act_window.view.history_revisions»,
«model.ir.action.act_window.view.pre_validate»,
«model.ir.action.act_window.view.copy»,
«model.ir.action.act_window.view.fields_get»,
«model.ir.action.act_window.view.default_get»,
«model.ir.action.act_window.view.delete»,
«model.ir.sequence.strict.view_toolbar_get»,
«model.ir.sequence.strict.fields_view_get»,
«model.ir.sequence.strict.export_data»,
«model.ir.sequence.strict.search_read»,
«model.ir.sequence.strict.import_data»,
«model.ir.sequence.strict.create»,
«model.ir.sequence.strict.search»,
«model.ir.sequence.strict.on_change_with»,
«model.ir.sequence.strict.write»,
«model.ir.sequence.strict.read»,
«model.ir.sequence.strict.search_count»,
«model.ir.sequence.strict.code_get»,
«model.ir.sequence.strict.history_revisions»,
«model.ir.sequence.strict.pre_validate»,
«model.ir.sequence.strict.copy»,
«model.ir.sequence.strict.fields_get»,
«model.ir.sequence.strict.default_get»,
«model.ir.sequence.strict.delete»,
«model.ir.ui.menu.favorite.view_toolbar_get»,
«model.ir.ui.menu.favorite.fields_view_get»,
«model.ir.ui.menu.favorite.export_data»,
«model.ir.ui.menu.favorite.search_read»,
«model.ir.ui.menu.favorite.import_data»,
«model.ir.ui.menu.favorite.create»,
«model.ir.ui.menu.favorite.get»,
«model.ir.ui.menu.favorite.search»,
«model.ir.ui.menu.favorite.on_change_with»,
«model.ir.ui.menu.favorite.write»,
«model.ir.ui.menu.favorite.read»,
«model.ir.ui.menu.favorite.search_count»,
«model.ir.ui.menu.favorite.set»,
«model.ir.ui.menu.favorite.history_revisions»,
«model.ir.ui.menu.favorite.pre_validate»,
«model.ir.ui.menu.favorite.copy»,
«model.ir.ui.menu.favorite.fields_get»,
«model.ir.ui.menu.favorite.default_get»,
«model.ir.ui.menu.favorite.unset»,
«model.ir.ui.menu.favorite.delete»,
«model.res.user-res.group.pre_validate»,
«model.res.user-res.group.fields_get»,
«model.res.user-res.group.default_get»,
«model.res.user-res.group.on_change_with»,
«model.ir.ui.view.show.start.view_toolbar_get»,
«model.ir.ui.view.show.start.fields_view_get»,
«model.ir.ui.view.show.start.on_change_with»,
«model.ir.ui.view.show.start.pre_validate»,
«model.ir.ui.view.show.start.fields_get»,
«model.ir.ui.view.show.start.default_get»,
«model.ir.attachment.view_toolbar_get»,
«model.ir.attachment.fields_view_get»,
«model.ir.attachment.export_data»,
«model.ir.attachment.search_read»,
«model.ir.attachment.import_data»,
«model.ir.attachment.create»,
«model.ir.attachment.search»,
«model.ir.attachment.on_change_with_summary»,
«model.ir.attachment.on_change_with»,
«model.ir.attachment.write»,
«model.ir.attachment.read»,
«model.ir.attachment.search_count»,
«model.ir.attachment.history_revisions»,
«model.ir.attachment.pre_validate»,
«model.ir.attachment.models_get»,
«model.ir.attachment.copy»,
«model.ir.attachment.fields_get»,
«model.ir.attachment.default_get»,
«model.ir.attachment.delete»,
«model.ir.translation.update.start.view_toolbar_get»,
«model.ir.translation.update.start.fields_view_get»,
«model.ir.translation.update.start.on_change_with»,
«model.ir.translation.update.start.pre_validate»,
«model.ir.translation.update.start.fields_get»,
«model.ir.translation.update.start.default_get»,
«model.ir.export.view_toolbar_get»,
«model.ir.export.fields_view_get»,
«model.ir.export.export_data»,
«model.ir.export.search_read»,
«model.ir.export.import_data»,
«model.ir.export.create»,
«model.ir.export.search»,
«model.ir.export.on_change_with»,
«model.ir.export.write»,
«model.ir.export.read»,
«model.ir.export.search_count»,
«model.ir.export.history_revisions»,
«model.ir.export.pre_validate»,
«model.ir.export.copy»,
«model.ir.export.fields_get»,
«model.ir.export.default_get»,
«model.ir.export.delete»,
«model.ir.ui.view_tree_width.view_toolbar_get»,
«model.ir.ui.view_tree_width.fields_view_get»,
«model.ir.ui.view_tree_width.set_width»,
«model.ir.ui.view_tree_width.export_data»,
«model.ir.ui.view_tree_width.search_read»,
«model.ir.ui.view_tree_width.import_data»,
«model.ir.ui.view_tree_width.create»,
«model.ir.ui.view_tree_width.search»,
«model.ir.ui.view_tree_width.on_change_with»,
«model.ir.ui.view_tree_width.write»,
«model.ir.ui.view_tree_width.read»,
«model.ir.ui.view_tree_width.search_count»,
«model.ir.ui.view_tree_width.history_revisions»,
«model.ir.ui.view_tree_width.pre_validate»,
«model.ir.ui.view_tree_width.copy»,
«model.ir.ui.view_tree_width.fields_get»,
«model.ir.ui.view_tree_width.default_get»,
«model.ir.ui.view_tree_width.delete»,
«model.res.group.view_toolbar_get»,
«model.res.group.fields_view_get»,
«model.res.group.export_data»,
«model.res.group.search_read»,
«model.res.group.import_data»,
«model.res.group.create»,
«model.res.group.search»,
«model.res.group.on_change_with»,
«model.res.group.write»,
«model.res.group.read»,
«model.res.group.search_count»,
«model.res.group.history_revisions»,
«model.res.group.pre_validate»,
«model.res.group.copy»,
«model.res.group.fields_get»,
«model.res.group.default_get»,
«model.res.group.delete»,
«model.ir.sequence.view_toolbar_get»,
«model.ir.sequence.fields_view_get»,
«model.ir.sequence.export_data»,
«model.ir.sequence.search_read»,
«model.ir.sequence.import_data»,
«model.ir.sequence.create»,
«model.ir.sequence.search»,
«model.ir.sequence.on_change_with»,
«model.ir.sequence.write»,
«model.ir.sequence.read»,
«model.ir.sequence.search_count»,
«model.ir.sequence.code_get»,
«model.ir.sequence.history_revisions»,
«model.ir.sequence.pre_validate»,
«model.ir.sequence.copy»,
«model.ir.sequence.fields_get»,
«model.ir.sequence.default_get»,
«model.ir.sequence.delete»,
«model.ir.model.data.view_toolbar_get»,
«model.ir.model.data.fields_view_get»,
«model.ir.model.data.export_data»,
«model.ir.model.data.search_read»,
«model.ir.model.data.import_data»,
«model.ir.model.data.create»,
«model.ir.model.data.search»,
«model.ir.model.data.on_change_with»,
«model.ir.model.data.write»,
«model.ir.model.data.read»,
«model.ir.model.data.search_count»,
«model.ir.model.data.history_revisions»,
«model.ir.model.data.pre_validate»,
«model.ir.model.data.copy»,
«model.ir.model.data.fields_get»,
«model.ir.model.data.default_get»,
«model.ir.model.data.delete»,
«model.ir.sequence.type-res.group.pre_validate»,
«model.ir.sequence.type-res.group.fields_get»,
«model.ir.sequence.type-res.group.default_get»,
«model.ir.sequence.type-res.group.on_change_with»,
«model.ir.trigger.log.pre_validate»,
«model.ir.trigger.log.fields_get»,
«model.ir.trigger.log.default_get»,
«model.ir.trigger.log.on_change_with»,
«model.ir.ui.view.view_toolbar_get»,
«model.ir.ui.view.fields_view_get»,
«model.ir.ui.view.export_data»,
«model.ir.ui.view.search_read»,
«model.ir.ui.view.import_data»,
«model.ir.ui.view.create»,
«model.ir.ui.view.search»,
«model.ir.ui.view.on_change_with»,
«model.ir.ui.view.write»,
«model.ir.ui.view.read»,
«model.ir.ui.view.search_count»,
«model.ir.ui.view.history_revisions»,
«model.ir.ui.view.pre_validate»,
«model.ir.ui.view.copy»,
«model.ir.ui.view.fields_get»,
«model.ir.ui.view.default_get»,
«model.ir.ui.view.delete»,
«model.ir.ui.view.show»,
«model.ir.action.report.view_toolbar_get»,
«model.ir.action.report.fields_view_get»,
«model.ir.action.report.on_change_with_report_content_name»,
«model.ir.action.report.export_data»,
«model.ir.action.report.search_read»,
«model.ir.action.report.import_data»,
«model.ir.action.report.create»,
«model.ir.action.report.search»,
«model.ir.action.report.on_change_with»,
«model.ir.action.report.write»,
«model.ir.action.report.read»,
«model.ir.action.report.search_count»,
«model.ir.action.report.history_revisions»,
«model.ir.action.report.pre_validate»,
«model.ir.action.report.copy»,
«model.ir.action.report.fields_get»,
«model.ir.action.report.default_get»,
«model.ir.action.report.delete»,
«model.res.user-ir.action.pre_validate»,
«model.res.user-ir.action.fields_get»,
«model.res.user-ir.action.default_get»,
«model.res.user-ir.action.on_change_with»,
«model.ir.model.field-res.group.pre_validate»,
«model.ir.model.field-res.group.fields_get»,
«model.ir.model.field-res.group.default_get»,
«model.ir.model.field-res.group.on_change_with»,
«model.ir.module.module.install_upgrade.done.view_toolbar_get»,
«model.ir.module.module.install_upgrade.done.fields_view_get»,
«model.ir.module.module.install_upgrade.done.on_change_with»,
«model.ir.module.module.install_upgrade.done.pre_validate»,
«model.ir.module.module.install_upgrade.done.fields_get»,
«model.ir.module.module.install_upgrade.done.default_get»,
«model.ir.rule.view_toolbar_get»,
«model.ir.rule.fields_view_get»,
«model.ir.rule.export_data»,
«model.ir.rule.search_read»,
«model.ir.rule.import_data»,
«model.ir.rule.create»,
«model.ir.rule.search»,
«model.ir.rule.on_change_with»,
«model.ir.rule.write»,
«model.ir.rule.read»,
«model.ir.rule.search_count»,
«model.ir.rule.history_revisions»,
«model.ir.rule.pre_validate»,
«model.ir.rule.copy»,
«model.ir.rule.fields_get»,
«model.ir.rule.default_get»,
«model.ir.rule.delete»,
«model.ir.translation.view_toolbar_get»,
«model.ir.translation.fields_view_get»,
«model.ir.translation.export_data»,
«model.ir.translation.search_read»,
«model.ir.translation.import_data»,
«model.ir.translation.create»,
«model.ir.translation.search»,
«model.ir.translation.on_change_with»,
«model.ir.translation.write»,
«model.ir.translation.read»,
«model.ir.translation.search_count»,
«model.ir.translation.get_language»,
«model.ir.translation.history_revisions»,
«model.ir.translation.pre_validate»,
«model.ir.translation.copy»,
«model.ir.translation.fields_get»,
«model.ir.translation.default_get»,
«model.ir.translation.delete»,
«model.ir.model.button.view_toolbar_get»,
«model.ir.model.button.fields_view_get»,
«model.ir.model.button.export_data»,
«model.ir.model.button.search_read»,
«model.ir.model.button.import_data»,
«model.ir.model.button.create»,
«model.ir.model.button.search»,
«model.ir.model.button.on_change_with»,
«model.ir.model.button.write»,
«model.ir.model.button.read»,
«model.ir.model.button.search_count»,
«model.ir.model.button.history_revisions»,
«model.ir.model.button.pre_validate»,
«model.ir.model.button.copy»,
«model.ir.model.button.fields_get»,
«model.ir.model.button.default_get»,
«model.ir.model.button.delete»,
«model.ir.translation.export.start.view_toolbar_get»,
«model.ir.translation.export.start.fields_view_get»,
«model.ir.translation.export.start.on_change_with»,
«model.ir.translation.export.start.pre_validate»,
«model.ir.translation.export.start.fields_get»,
«model.ir.translation.export.start.default_get»,
«model.ir.sequence.type.view_toolbar_get»,
«model.ir.sequence.type.fields_view_get»,
«model.ir.sequence.type.export_data»,
«model.ir.sequence.type.search_read»,
«model.ir.sequence.type.import_data»,
«model.ir.sequence.type.create»,
«model.ir.sequence.type.search»,
«model.ir.sequence.type.on_change_with»,
«model.ir.sequence.type.write»,
«model.ir.sequence.type.read»,
«model.ir.sequence.type.search_count»,
«model.ir.sequence.type.history_revisions»,
«model.ir.sequence.type.pre_validate»,
«model.ir.sequence.type.copy»,
«model.ir.sequence.type.fields_get»,
«model.ir.sequence.type.default_get»,
«model.ir.sequence.type.delete»,
«model.ir.action.wizard.view_toolbar_get»,
«model.ir.action.wizard.fields_view_get»,
«model.ir.action.wizard.export_data»,
«model.ir.action.wizard.search_read»,
«model.ir.action.wizard.import_data»,
«model.ir.action.wizard.create»,
«model.ir.action.wizard.search»,
«model.ir.action.wizard.on_change_with»,
«model.ir.action.wizard.write»,
«model.ir.action.wizard.read»,
«model.ir.action.wizard.search_count»,
«model.ir.action.wizard.history_revisions»,
«model.ir.action.wizard.pre_validate»,
«model.ir.action.wizard.copy»,
«model.ir.action.wizard.fields_get»,
«model.ir.action.wizard.default_get»,
«model.ir.action.wizard.delete»,
«model.res.user.get_preferences_fields_view»,
«model.res.user.view_toolbar_get»,
«model.res.user.fields_view_get»,
«model.res.user.export_data»,
«model.res.user.search_read»,
«model.res.user.import_data»,
«model.res.user.create»,
«model.res.user.search»,
«model.res.user.on_change_with»,
«model.res.user.write»,
«model.res.user.read»,
«model.res.user.search_count»,
«model.res.user.get_preferences»,
«model.res.user.history_revisions»,
«model.res.user.pre_validate»,
«model.res.user.set_preferences»,
«model.res.user.copy»,
«model.res.user.fields_get»,
«model.res.user.default_get»,
«model.res.user.delete»,
«model.ir.translation.clean.start.view_toolbar_get»,
«model.ir.translation.clean.start.fields_view_get»,
«model.ir.translation.clean.start.on_change_with»,
«model.ir.translation.clean.start.pre_validate»,
«model.ir.translation.clean.start.fields_get»,
«model.ir.translation.clean.start.default_get»,
«model.ir.ui.menu.view_toolbar_get»,
«model.ir.ui.menu.fields_view_get»,
«model.ir.ui.menu.export_data»,
«model.ir.ui.menu.search_read»,
«model.ir.ui.menu.import_data»,
«model.ir.ui.menu.create»,
«model.ir.ui.menu.search»,
«model.ir.ui.menu.on_change_with»,
«model.ir.ui.menu.write»,
«model.ir.ui.menu.read»,
«model.ir.ui.menu.search_count»,
«model.ir.ui.menu.history_revisions»,
«model.ir.ui.menu.pre_validate»,
«model.ir.ui.menu.copy»,
«model.ir.ui.menu.fields_get»,
«model.ir.ui.menu.default_get»,
«model.ir.ui.menu.list_icons»,
«model.ir.ui.menu.delete»,
«model.ir.cache.pre_validate»,
«model.ir.cache.fields_get»,
«model.ir.cache.default_get»,
«model.ir.cache.on_change_with»,
«model.ir.module.module.config_wizard.other.view_toolbar_get»,
«model.ir.module.module.config_wizard.other.fields_view_get»,
«model.ir.module.module.config_wizard.other.on_change_with»,
«model.ir.module.module.config_wizard.other.pre_validate»,
«model.ir.module.module.config_wizard.other.fields_get»,
«model.ir.module.module.config_wizard.other.default_get»,
«model.ir.ui.icon.view_toolbar_get»,
«model.ir.ui.icon.fields_view_get»,
«model.ir.ui.icon.export_data»,
«model.ir.ui.icon.search_read»,
«model.ir.ui.icon.import_data»,
«model.ir.ui.icon.create»,
«model.ir.ui.icon.search»,
«model.ir.ui.icon.on_change_with»,
«model.ir.ui.icon.write»,
«model.ir.ui.icon.read»,
«model.ir.ui.icon.search_count»,
«model.ir.ui.icon.history_revisions»,
«model.ir.ui.icon.pre_validate»,
«model.ir.ui.icon.copy»,
«model.ir.ui.icon.fields_get»,
«model.ir.ui.icon.default_get»,
«model.ir.ui.icon.list_icons»,
«model.ir.ui.icon.delete»,
«model.ir.configuration.pre_validate»,
«model.ir.configuration.fields_get»,
«model.ir.configuration.default_get»,
«model.ir.configuration.on_change_with»,
«model.ir.rule.group.view_toolbar_get»,
«model.ir.rule.group.fields_view_get»,
«model.ir.rule.group.export_data»,
«model.ir.rule.group.search_read»,
«model.ir.rule.group.import_data»,
«model.ir.rule.group.create»,
«model.ir.rule.group.search»,
«model.ir.rule.group.on_change_with»,
«model.ir.rule.group.write»,
«model.ir.rule.group.read»,
«model.ir.rule.group.search_count»,
«model.ir.rule.group.history_revisions»,
«model.ir.rule.group.pre_validate»,
«model.ir.rule.group.copy»,
«model.ir.rule.group.fields_get»,
«model.ir.rule.group.default_get»,
«model.ir.rule.group.delete»,
«model.ir.rule.group-res.user.pre_validate»,
«model.ir.rule.group-res.user.fields_get»,
«model.ir.rule.group-res.user.default_get»,
«model.ir.rule.group-res.user.on_change_with»,
«model.res.user.warning.view_toolbar_get»,
«model.res.user.warning.fields_view_get»,
«model.res.user.warning.export_data»,
«model.res.user.warning.search_read»,
«model.res.user.warning.import_data»,
«model.res.user.warning.create»,
«model.res.user.warning.search»,
«model.res.user.warning.on_change_with»,
«model.res.user.warning.write»,
«model.res.user.warning.read»,
«model.res.user.warning.search_count»,
«model.res.user.warning.history_revisions»,
«model.res.user.warning.pre_validate»,
«model.res.user.warning.copy»,
«model.res.user.warning.fields_get»,
«model.res.user.warning.default_get»,
«model.res.user.warning.delete»,
«model.ir.translation.clean.succeed.view_toolbar_get»,
«model.ir.translation.clean.succeed.fields_view_get»,
«model.ir.translation.clean.succeed.on_change_with»,
«model.ir.translation.clean.succeed.pre_validate»,
«model.ir.translation.clean.succeed.fields_get»,
«model.ir.translation.clean.succeed.default_get»,
«model.ir.trigger.view_toolbar_get»,
«model.ir.trigger.fields_view_get»,
«model.ir.trigger.on_change_on_time»,
«model.ir.trigger.on_change_on_write»,
«model.ir.trigger.export_data»,
«model.ir.trigger.search_read»,
«model.ir.trigger.import_data»,
«model.ir.trigger.create»,
«model.ir.trigger.on_change_on_delete»,
«model.ir.trigger.search»,
«model.ir.trigger.on_change_with»,
«model.ir.trigger.write»,
«model.ir.trigger.read»,
«model.ir.trigger.search_count»,
«model.ir.trigger.history_revisions»,
«model.ir.trigger.pre_validate»,
«model.ir.trigger.on_change_on_create»,
«model.ir.trigger.copy»,
«model.ir.trigger.fields_get»,
«model.ir.trigger.default_get»,
«model.ir.trigger.delete»,
«model.ir.action.keyword.view_toolbar_get»,
«model.ir.action.keyword.fields_view_get»,
«model.ir.action.keyword.export_data»,
«model.ir.action.keyword.search_read»,
«model.ir.action.keyword.import_data»,
«model.ir.action.keyword.create»,
«model.ir.action.keyword.get_keyword»,
«model.ir.action.keyword.search»,
«model.ir.action.keyword.on_change_with»,
«model.ir.action.keyword.write»,
«model.ir.action.keyword.read»,
«model.ir.action.keyword.search_count»,
«model.ir.action.keyword.history_revisions»,
«model.ir.action.keyword.pre_validate»,
«model.ir.action.keyword.models_get»,
«model.ir.action.keyword.copy»,
«model.ir.action.keyword.fields_get»,
«model.ir.action.keyword.default_get»,
«model.ir.action.keyword.delete»,
«model.ir.date.pre_validate»,
«model.ir.date.fields_get»,
«model.ir.date.default_get»,
«model.ir.date.today»,
«model.ir.date.on_change_with»,
«model.ir.model.field.access.view_toolbar_get»,
«model.ir.model.field.access.fields_view_get»,
«model.ir.model.field.access.export_data»,
«model.ir.model.field.access.search_read»,
«model.ir.model.field.access.import_data»,
«model.ir.model.field.access.create»,
«model.ir.model.field.access.search»,
«model.ir.model.field.access.on_change_with»,
«model.ir.model.field.access.write»,
«model.ir.model.field.access.read»,
«model.ir.model.field.access.search_count»,
«model.ir.model.field.access.history_revisions»,
«model.ir.model.field.access.pre_validate»,
«model.ir.model.field.access.copy»,
«model.ir.model.field.access.fields_get»,
«model.ir.model.field.access.default_get»,
«model.ir.model.field.access.delete»,
«model.ir.model.button-res.group.pre_validate»,
«model.ir.model.button-res.group.fields_get»,
«model.ir.model.button-res.group.default_get»,
«model.ir.model.button-res.group.on_change_with»,
«model.ir.lang.view_toolbar_get»,
«model.ir.lang.fields_view_get»,
«model.ir.lang.export_data»,
«model.ir.lang.search_read»,
«model.ir.lang.import_data»,
«model.ir.lang.create»,
«model.ir.lang.search»,
«model.ir.lang.on_change_with»,
«model.ir.lang.write»,
«model.ir.lang.read»,
«model.ir.lang.search_count»,
«model.ir.lang.history_revisions»,
«model.ir.lang.pre_validate»,
«model.ir.lang.copy»,
«model.ir.lang.fields_get»,
«model.ir.lang.default_get»,
«model.ir.lang.delete»,
«model.ir.cron.view_toolbar_get»,
«model.ir.cron.fields_view_get»,
«model.ir.cron.export_data»,
«model.ir.cron.search_read»,
«model.ir.cron.import_data»,
«model.ir.cron.create»,
«model.ir.cron.search»,
«model.ir.cron.on_change_with»,
«model.ir.cron.write»,
«model.ir.cron.read»,
«model.ir.cron.search_count»,
«model.ir.cron.history_revisions»,
«model.ir.cron.pre_validate»,
«model.ir.cron.copy»,
«model.ir.cron.fields_get»,
«model.ir.cron.default_get»,
«model.ir.cron.delete»,
«model.ir.export.line.view_toolbar_get»,
«model.ir.export.line.fields_view_get»,
«model.ir.export.line.export_data»,
«model.ir.export.line.search_read»,
«model.ir.export.line.import_data»,
«model.ir.export.line.create»,
«model.ir.export.line.search»,
«model.ir.export.line.on_change_with»,
«model.ir.export.line.write»,
«model.ir.export.line.read»,
«model.ir.export.line.search_count»,
«model.ir.export.line.history_revisions»,
«model.ir.export.line.pre_validate»,
«model.ir.export.line.copy»,
«model.ir.export.line.fields_get»,
«model.ir.export.line.default_get»,
«model.ir.export.line.delete»,
«model.ir.translation.set.start.view_toolbar_get»,
«model.ir.translation.set.start.fields_view_get»,
«model.ir.translation.set.start.on_change_with»,
«model.ir.translation.set.start.pre_validate»,
«model.ir.translation.set.start.fields_get»,
«model.ir.translation.set.start.default_get»,
«model.ir.model.field.view_toolbar_get»,
«model.ir.model.field.fields_view_get»,
«model.ir.model.field.export_data»,
«model.ir.model.field.search_read»,
«model.ir.model.field.import_data»,
«model.ir.model.field.create»,
«model.ir.model.field.search»,
«model.ir.model.field.on_change_with»,
«model.ir.model.field.write»,
«model.ir.model.field.read»,
«model.ir.model.field.search_count»,
«model.ir.model.field.history_revisions»,
«model.ir.model.field.pre_validate»,
«model.ir.model.field.copy»,
«model.ir.model.field.fields_get»,
«model.ir.model.field.default_get»,
«model.ir.model.field.delete»,
«model.ir.module.module.config_wizard.item.view_toolbar_get»,
«model.ir.module.module.config_wizard.item.fields_view_get»,
«model.ir.module.module.config_wizard.item.export_data»,
«model.ir.module.module.config_wizard.item.search_read»,
«model.ir.module.module.config_wizard.item.import_data»,
«model.ir.module.module.config_wizard.item.create»,
«model.ir.module.module.config_wizard.item.search»,
«model.ir.module.module.config_wizard.item.on_change_with»,
«model.ir.module.module.config_wizard.item.write»,
«model.ir.module.module.config_wizard.item.read»,
«model.ir.module.module.config_wizard.item.search_count»,
«model.ir.module.module.config_wizard.item.history_revisions»,
«model.ir.module.module.config_wizard.item.pre_validate»,
«model.ir.module.module.config_wizard.item.copy»,
«model.ir.module.module.config_wizard.item.fields_get»,
«model.ir.module.module.config_wizard.item.default_get»,
«model.ir.module.module.config_wizard.item.delete»,
«model.ir.model.global_search»,
«model.ir.model.view_toolbar_get»,
«model.ir.model.fields_view_get»,
«model.ir.model.list_models»,
«model.ir.model.export_data»,
«model.ir.model.search_read»,
«model.ir.model.import_data»,
«model.ir.model.create»,
«model.ir.model.search»,
«model.ir.model.list_history»,
«model.ir.model.on_change_with»,
«model.ir.model.write»,
«model.ir.model.read»,
«model.ir.model.search_count»,
«model.ir.model.history_revisions»,
«model.ir.model.pre_validate»,
«model.ir.model.copy»,
«model.ir.model.fields_get»,
«model.ir.model.default_get»,
«model.ir.model.delete»,
«wizard.ir.module.module.config_wizard.create»,
«wizard.ir.module.module.config_wizard.execute»,
«wizard.ir.module.module.config_wizard.delete»,
«wizard.ir.translation.update.create»,
«wizard.ir.translation.update.execute»,
«wizard.ir.translation.update.delete»,
«wizard.ir.translation.set.create»,
«wizard.ir.translation.set.execute»,
«wizard.ir.translation.set.delete»,
«wizard.ir.module.module.install_upgrade.create»,
«wizard.ir.module.module.install_upgrade.execute»,
«wizard.ir.module.module.install_upgrade.delete»,
«wizard.ir.translation.export.create»,
«wizard.ir.translation.export.execute»,
«wizard.ir.translation.export.delete»,
«wizard.res.user.config.create»,
«wizard.res.user.config.execute»,
«wizard.res.user.config.delete»,
«wizard.ir.ui.view.show.create»,
«wizard.ir.ui.view.show.execute»,
«wizard.ir.ui.view.show.delete»,
«wizard.ir.module.module.config.create»,
«wizard.ir.module.module.config.execute»,
«wizard.ir.module.module.config.delete»,
«wizard.ir.model.print_model_graph.create»,
«wizard.ir.model.print_model_graph.execute»,
«wizard.ir.model.print_model_graph.delete»,
«wizard.ir.translation.clean.create»,
«wizard.ir.translation.clean.execute»,
«wizard.ir.translation.clean.delete»,
«report.ir.model.graph.execute»
]
}


PS If the topic is interesting, then in the following articles will be about connecting standard modules and their APIs, using standard modules, developing your own modules, etc.

Read Next