Introduction

Clodoo is a set of tools to manage to manage multiple Odoo installations with many DBs.

With clodoo you can do massive operations on 1 or more Odoo databases based on different Odoo versions. Main operation are:

  • create consistent database to run tests

  • repeat consistent action on many db with same or different Odoo version

  • repeat above actions on every new database

clodoo is also a PYPI package to simplify RPC connection to Odoo. The PYPI package is a hub to oerplib and odoorpc packages, so generic python client can execute any command to any Odoo version server (from 6.1 to 13.0)

Available commands & features are:

Function

Note

Add new repository

odoo_install_repository

Update paid invoice

inv2draft_n_restore.py

List requirement of Odoo

list_requirements.py

Create full configurated Odoo DB

manage_db

Manage Odoo installation

manage_odoo

Set Odoo Skin (backoffice)

odoo_skin.sh

Run Odoo instance to debug

run_odoo_debug

Manage version depending names

transodoo.py

General Purpose RPC

clodoo.py

Export Odoo model to test file

export_db_model.py

Migrate Odoo

migrate_odoo.py (deprecated)

Examples

example*.py

clodoo.py: general Purpose RPC

clodoo.py ia general purpose xmlrpc / json interface. It is called by bash console, there is no funcional web/GUI interface.

$ usage: clodoo.py [-h] [-A actions] [-b version] [-c file] [-d regex] [-D]

[-l iso_lang] [-n] [-p dir] [-P password] [-q] [-r port] [-U username] [-u list] [-v] [-V] [-x]

optional arguments:
-h, --help

show this help message and exit

-A actions, --action-to-do actions

action to do (use help to dir)

-b version, --odoo-branch version

talk server Odoo version

-c file, --config file

configuration command file

-d regex, --dbfilter regex

DB filter

-D, --with-demo

create db with demo data

-l iso_lang, --lang iso_lang

user language

-n, --dry-run

test execution mode

-p dir, --data-path dir

Import file path

-P password, --pwd password

login password

-q, --quiet

run silently

-r port, --xmlrpc-port port

xmlrpc port

-U username, --user username

login username

-u list, --upgrade-modules list

Module list to upgrade

-v, --verbose

run with debugging output

-V, --version

show program’s version number and exit

-x, --exit-on-error

exit on error

Import_file

Import file loads data from a csv file into DB. This action works as standard Odoo but has some enhanced features. Field value may be:

  • external identifier, format module.name (as Odoo standard) i.e. ‘base.main_company’

  • text with macros, format ${macro} (no Odoo standard), dictionary passed i.e. ‘${company_id}’ text may contains one or more macros

  • text with DB extraction, format ${model:values} (w/o company, no Odoo std) i.e. ‘${res.company:your company}’ data is searched by name

  • text with DB extraction, format ${model::values} (with company, no Odoo std) i.e. ‘${res.partner::Odoo SA}’ data is searched by name, company from ctx[‘company_id’]

  • text with DB extraction, format ${model(params):values} (w/o company) i.e. ‘${res.company(zip):1010}’ data is searched by param(s)

  • text with function, format ${function(params)::values} (add company) i.e. ‘${res.partner(zip)::1010}’ data is searched by param(s), company from ctx[‘company_id’]

  • full text function, format ${function[field](params):values} (w/o company) full text function, format ${function[field](params)::values} (add company) i.e. ‘${res.partner[name](zip)::1010}’ data is searched as in above function; returned value is not id but field

  • crypted data, begins with $1$! i.e ‘$1$!abc’

  • expression, begin with = (deprecated)

  • odoo multiversion text, format model.constant.0 (in model replace ‘.’ by ‘_’) i.e. ‘res_groups.SALES.0’

  • odoo versioned value, format model.value.majversion i.e. ‘res_groups.Sales.8’

Predefines macros (in ctx):

company_id default company_id company_name name of default company (if company_id not valid) country_code ISO-3166 default country (see def_country_id) customer-supplier if field contains ‘customer’ or ‘client’ set customer=True if it contains ‘supplier’ or ‘vendor’ or ‘fornitore’ set supplier=True def_country_id default country id (from company or from user) def_email default mail; format: {username}{majversion}@example.com full_model load all field values, even if not in csv header_id id of header when import header/details files lang language, format lang_COUNTRY, i.e. it_IT (default en_US) name2 if present, is merged with name name_first if present with name last, are merged to compose name name_last if present with name first, are merged to compose name street2 if present and just numeric, is merged with street zeroadm_mail default user mail from conf file or <def_mail> if -D switch zeroadm_login default admin username from conf file oneadm_mail default user2 mail from conf file or <def_mail> if -D switch oneadm_login default admin2 username from conf file botadm_mail default bot user mail from conf file or <def_mail> if -D switch botadm_login default bot username from conf file _today date.today() _current_year date.today().year _last_year’ date.today().year - 1 TNL_DICT dictionary with field translation, format csv_name: field_name; i.e {‘partner_name’: ‘name’} or csv_position: field_name, i.e. {‘0’: ‘name’} TNL_VALUE dictionary with value translation for field; format is field_name: {csv_value: field_value, …} i.e. {‘country’: {‘Inghilterra’: ‘Regno Unito’}} special value ‘$BOOLEAN’ return True or False DEFAULT dictionary with default value, format field_name: value EXPR evaluate value from expression, format csv_name: expression; expression can refer to other fields of csv record in format csv[field_name] or other fields of record in format row[field_name] i.e. {‘is_company’: ‘row[“ref”] != “”’} {‘is_company’: ‘csv[“CustomerRef”] != “”’} MANDATORY dictionary with mandatory field names

Import searches for existing data (this behavior differs from Odoo standard) Search is based on <o_model> dictionary; default field to search is ‘name’ or ‘id’, if passed.

File csv can contain some special fields:
db_type: select record if DB name matches db type; values are
    'D' for demo,
    'T' for test,
    'Z' for zeroincombenze production,
    'V' for VG7 customers
    'C' other customers
oe_versions: select record if matches Odoo version
    i.e  +11.0+10.0 => select record if Odoo 11.0 or 10.0
    i.e  -6.1-7.0 => select record if Odoo is not 6.1 and not 7.0

odoo_install_repository: manage repositories

Usage: odoo_install_repository [-h][-b branch][-c file][-CDjLmn][-O git-org][-o path][-qrU][-u username][-Vvy1] git_repo odoo_vid new_odoo_vid
Add or duplicate odoo repository into local filesystem
 -h              this help
 -b branch       default odoo branch
 -c file         configuration file (def .travis.conf)
 -C              do not touch configuration file (conflict with -D)
 -D              update default values in /etc configuration file before creating script (conflict with -C)
 -j              install only repository owned by git organization
 -L              create symbolic link rather copy files (if new_odoo_ver supplied)
 -m              multi-version odoo environment
 -n              do nothing (dry-run)
 -O git-org      git organization, one of oca oia[-git|-http] zero[-git|-http] (def zero)
 -o path         odoo directory
 -q              silent mode
 -r              do just update remote info (if no new_odoo_ver supplied)
 -U              do not install, do upgrade
 -u username     execute as username (def=odoo)
 -V              show version
 -v              verbose mode
 -y              assume yes
 -1              if clone depth=1

odoorc: general purpose bash function

The bash file odoorc is a general purpose Odoo library. It supplies some Odoo values from odoo_vid or from odoo directory. Some values may depends by environment:

  • ODOO_DB_USER is the rule to return db username (def odoo%(MAJVER)s)

  • ODOO_GIT_HOSTNAME is the git hostname (def github.com)

  • ODOO_GIT_SHORT -> regex of git organizzations with vid short name (def /(oca)/, see odoo-vid)

Usage:

. odoorc RES=$(build_odoo_param PARAM odoo_vid [(search|DEBUG|default|tree|SERVER|<rptname>|<modname>)] [oca|zero|zero-http|zero-git|librerp|flectra] [(search|DEBUG|default|tree|SERVER)])

where:

PARAM is one of (ALL|BIN|CONFN|DB_USER|DDIR|FLOG|FPID|FULLVER|FULL_SVCNAME|GIT_BRANCH|GIT_OPTS|GIT_ORG|GIT_ORGNM|GIT_PROT|GIT_URL|HOME|INVALID_MODNAMES|INVALID_MODNAMES_RE|LICENSE|LCONFN|MAJVER|MANIFEST|OCB_SUBDIRS|OCB_SUBDIRS_RE|OPTS_ASM|PARENTDIR|PKGNAME|PKGPATH|REPOS|ROOT|RORIGIN|RPCPORT|RUPSTREAM|SVCNAME|UPSTREAM|URL|URL_BRANCH|USER|VCS|VDIR|VENV)


This module is part of tools project.

Last Update / Ultimo aggiornamento: 2023-08-06