Full Code of tryton/trytond for AI

develop 3df41d95dd27 cached
542 files
5.1 MB
1.4M tokens
4290 symbols
1 requests
Download .txt
Showing preview only (5,550K chars total). Download the full file or copy to clipboard to get everything.
Repository: tryton/trytond
Branch: develop
Commit: 3df41d95dd27
Files: 542
Total size: 5.1 MB

Directory structure:
gitextract_kai1xkwn/

├── .drone.yml
├── .flake8
├── .hgtags
├── .isort.cfg
├── CHANGELOG
├── COPYRIGHT
├── LICENSE
├── MANIFEST.in
├── README.rst
├── bin/
│   ├── trytond
│   ├── trytond-admin
│   ├── trytond-console
│   ├── trytond-cron
│   ├── trytond-stat
│   └── trytond-worker
├── doc/
│   ├── conf.py
│   ├── index.rst
│   ├── ref/
│   │   ├── backend.rst
│   │   ├── bus.rst
│   │   ├── cache.rst
│   │   ├── exceptions.rst
│   │   ├── fields.rst
│   │   ├── filestore.rst
│   │   ├── i18n.rst
│   │   ├── index.rst
│   │   ├── models.rst
│   │   ├── pool.rst
│   │   ├── pyson.rst
│   │   ├── rpc.rst
│   │   ├── sendmail.rst
│   │   ├── tests.rst
│   │   ├── tools/
│   │   │   ├── email.rst
│   │   │   ├── immutabledict.rst
│   │   │   ├── index.rst
│   │   │   ├── misc.rst
│   │   │   ├── singleton.rst
│   │   │   └── timezone.rst
│   │   ├── transaction.rst
│   │   └── wizard.rst
│   ├── releases.rst
│   ├── topics/
│   │   ├── access_rights.rst
│   │   ├── actions.rst
│   │   ├── backend_types.rst
│   │   ├── bus.rst
│   │   ├── configuration.rst
│   │   ├── cron.rst
│   │   ├── domain.rst
│   │   ├── index.rst
│   │   ├── install.rst
│   │   ├── logs.rst
│   │   ├── models/
│   │   │   ├── fields_default_value.rst
│   │   │   ├── fields_on_change.rst
│   │   │   └── index.rst
│   │   ├── modules/
│   │   │   └── index.rst
│   │   ├── pyson.rst
│   │   ├── reports/
│   │   │   └── index.rst
│   │   ├── rpc.rst
│   │   ├── setup_database.rst
│   │   ├── start_server.rst
│   │   ├── task_queue.rst
│   │   ├── testing.rst
│   │   ├── translation.rst
│   │   ├── triggers.rst
│   │   ├── user_application.rst
│   │   ├── user_errors_warnings.rst
│   │   ├── views/
│   │   │   ├── extension.rst
│   │   │   └── index.rst
│   │   └── wizard.rst
│   └── tutorial/
│       ├── index.rst
│       └── module/
│           ├── anatomy.rst
│           ├── default_values.rst
│           ├── domains.rst
│           ├── extend.rst
│           ├── function_fields.rst
│           ├── index.rst
│           ├── model.rst
│           ├── on_change.rst
│           ├── report.rst
│           ├── setup.rst
│           ├── setup_database.rst
│           ├── states.rst
│           ├── table_query.rst
│           ├── view.rst
│           ├── wizard.rst
│           └── workflow.rst
├── setup.py
├── tox.ini
└── trytond/
    ├── __init__.py
    ├── admin.py
    ├── application.py
    ├── backend/
    │   ├── __init__.py
    │   ├── database.py
    │   ├── postgresql/
    │   │   ├── __init__.py
    │   │   ├── database.py
    │   │   ├── init.sql
    │   │   └── table.py
    │   ├── sqlite/
    │   │   ├── __init__.py
    │   │   ├── database.py
    │   │   ├── init.sql
    │   │   └── table.py
    │   └── table.py
    ├── bus.py
    ├── cache.py
    ├── commandline.py
    ├── config.py
    ├── console.py
    ├── const.py
    ├── convert.py
    ├── cron.py
    ├── exceptions.py
    ├── filestore.py
    ├── i18n.py
    ├── ir/
    │   ├── __init__.py
    │   ├── action.py
    │   ├── action.xml
    │   ├── attachment.py
    │   ├── attachment.xml
    │   ├── avatar.py
    │   ├── cache.py
    │   ├── calendar_.py
    │   ├── calendar_.xml
    │   ├── configuration.py
    │   ├── cron.py
    │   ├── cron.xml
    │   ├── date.py
    │   ├── email.xml
    │   ├── email_.py
    │   ├── error.py
    │   ├── error.xml
    │   ├── exceptions.py
    │   ├── export.py
    │   ├── export.xml
    │   ├── fonts/
    │   │   └── LICENSE
    │   ├── ir.xml
    │   ├── lang.py
    │   ├── lang.xml
    │   ├── locale/
    │   │   ├── bg.po
    │   │   ├── ca.po
    │   │   ├── cs.po
    │   │   ├── de.po
    │   │   ├── es.po
    │   │   ├── es_419.po
    │   │   ├── et.po
    │   │   ├── fa.po
    │   │   ├── fi.po
    │   │   ├── fr.po
    │   │   ├── hu.po
    │   │   ├── id.po
    │   │   ├── it.po
    │   │   ├── lo.po
    │   │   ├── lt.po
    │   │   ├── nl.po
    │   │   ├── pl.po
    │   │   ├── pt.po
    │   │   ├── ro.po
    │   │   ├── ru.po
    │   │   ├── sl.po
    │   │   ├── tr.po
    │   │   ├── uk.po
    │   │   └── zh_CN.po
    │   ├── message.py
    │   ├── message.xml
    │   ├── model.py
    │   ├── model.xml
    │   ├── module.py
    │   ├── module.xml
    │   ├── note.py
    │   ├── note.xml
    │   ├── queue.xml
    │   ├── queue_.py
    │   ├── resource.py
    │   ├── routes.py
    │   ├── rule.py
    │   ├── rule.xml
    │   ├── sequence.py
    │   ├── sequence.xml
    │   ├── session.py
    │   ├── translation.py
    │   ├── translation.xml
    │   ├── trigger.py
    │   ├── trigger.xml
    │   ├── tryton.cfg
    │   ├── ui/
    │   │   ├── __init__.py
    │   │   ├── board.rnc
    │   │   ├── board.rng
    │   │   ├── calendar.rnc
    │   │   ├── calendar.rng
    │   │   ├── form.rnc
    │   │   ├── form.rng
    │   │   ├── graph.rnc
    │   │   ├── graph.rng
    │   │   ├── icon.py
    │   │   ├── icon.xml
    │   │   ├── icons/
    │   │   │   └── LICENSE
    │   │   ├── menu.py
    │   │   ├── menu.xml
    │   │   ├── tree.rnc
    │   │   ├── tree.rng
    │   │   ├── ui.xml
    │   │   ├── view.py
    │   │   └── view.xml
    │   └── view/
    │       ├── action_act_window_domain_form.xml
    │       ├── action_act_window_domain_list.xml
    │       ├── action_act_window_domain_list2.xml
    │       ├── action_act_window_form.xml
    │       ├── action_act_window_list.xml
    │       ├── action_act_window_view_form.xml
    │       ├── action_act_window_view_list.xml
    │       ├── action_act_window_view_list2.xml
    │       ├── action_form.xml
    │       ├── action_keyword_form.xml
    │       ├── action_keyword_list.xml
    │       ├── action_list.xml
    │       ├── action_report_form.xml
    │       ├── action_report_list.xml
    │       ├── action_url_form.xml
    │       ├── action_url_list.xml
    │       ├── action_wizard_form.xml
    │       ├── action_wizard_list.xml
    │       ├── attachment_form.xml
    │       ├── attachment_form_preview.xml
    │       ├── attachment_list.xml
    │       ├── cron_form.xml
    │       ├── cron_list.xml
    │       ├── email_form.xml
    │       ├── email_list.xml
    │       ├── email_template_form.xml
    │       ├── email_template_list.xml
    │       ├── error_form.xml
    │       ├── error_list.xml
    │       ├── export_form.xml
    │       ├── export_line_form.xml
    │       ├── export_line_list.xml
    │       ├── export_list.xml
    │       ├── icon_view_form.xml
    │       ├── icon_view_list.xml
    │       ├── lang_config_start_form.xml
    │       ├── lang_form.xml
    │       ├── lang_list.xml
    │       ├── message_form.xml
    │       ├── message_list.xml
    │       ├── model_access_form.xml
    │       ├── model_access_list.xml
    │       ├── model_button_click_form.xml
    │       ├── model_button_click_list.xml
    │       ├── model_button_form.xml
    │       ├── model_button_list.xml
    │       ├── model_button_rule_form.xml
    │       ├── model_button_rule_list.xml
    │       ├── model_data_form.xml
    │       ├── model_data_list.xml
    │       ├── model_field_access_form.xml
    │       ├── model_field_access_list.xml
    │       ├── model_field_form.xml
    │       ├── model_field_list.xml
    │       ├── model_form.xml
    │       ├── model_list.xml
    │       ├── model_print_model_graph_start_form.xml
    │       ├── module_activate_upgrade_done_form.xml
    │       ├── module_activate_upgrade_start_form.xml
    │       ├── module_config_start_form.xml
    │       ├── module_config_wizard_done_form.xml
    │       ├── module_config_wizard_first_form.xml
    │       ├── module_config_wizard_item_list.xml
    │       ├── module_config_wizard_other_form.xml
    │       ├── module_dependency_form.xml
    │       ├── module_dependency_list.xml
    │       ├── module_form.xml
    │       ├── module_list.xml
    │       ├── note_form.xml
    │       ├── note_list.xml
    │       ├── rule_form.xml
    │       ├── rule_group_form.xml
    │       ├── rule_group_list.xml
    │       ├── rule_list.xml
    │       ├── sequence_form.xml
    │       ├── sequence_list.xml
    │       ├── sequence_type_form.xml
    │       ├── sequence_type_list.xml
    │       ├── translation_clean_start_form.xml
    │       ├── translation_clean_succeed_form.xml
    │       ├── translation_export_result_form.xml
    │       ├── translation_export_start_form.xml
    │       ├── translation_form.xml
    │       ├── translation_list.xml
    │       ├── translation_set_start_form.xml
    │       ├── translation_set_succeed_form.xml
    │       ├── translation_update_start_form.xml
    │       ├── trigger_form.xml
    │       ├── trigger_list.xml
    │       ├── ui_menu_favorite_form.xml
    │       ├── ui_menu_favorite_list.xml
    │       ├── ui_menu_form.xml
    │       ├── ui_menu_list.xml
    │       ├── ui_menu_tree.xml
    │       ├── ui_view_form.xml
    │       ├── ui_view_list.xml
    │       ├── ui_view_search_form.xml
    │       ├── ui_view_search_list.xml
    │       ├── ui_view_tree_optional_form.xml
    │       ├── ui_view_tree_optional_list.xml
    │       ├── ui_view_tree_state_form.xml
    │       ├── ui_view_tree_state_list.xml
    │       ├── ui_view_tree_width_form.xml
    │       └── ui_view_tree_width_list.xml
    ├── model/
    │   ├── __init__.py
    │   ├── active.py
    │   ├── avatar.py
    │   ├── descriptors.py
    │   ├── dictschema.py
    │   ├── digits.py
    │   ├── exceptions.py
    │   ├── fields/
    │   │   ├── __init__.py
    │   │   ├── binary.py
    │   │   ├── boolean.py
    │   │   ├── char.py
    │   │   ├── date.py
    │   │   ├── dict.py
    │   │   ├── field.py
    │   │   ├── float.py
    │   │   ├── function.py
    │   │   ├── integer.py
    │   │   ├── many2many.py
    │   │   ├── many2one.py
    │   │   ├── multiselection.py
    │   │   ├── numeric.py
    │   │   ├── one2many.py
    │   │   ├── one2one.py
    │   │   ├── reference.py
    │   │   ├── selection.py
    │   │   └── text.py
    │   ├── match.py
    │   ├── model.py
    │   ├── modelsingleton.py
    │   ├── modelsql.py
    │   ├── modelstorage.py
    │   ├── modelview.py
    │   ├── multivalue.py
    │   ├── order.py
    │   ├── symbol.py
    │   ├── tree.py
    │   ├── union.py
    │   └── workflow.py
    ├── modules/
    │   └── __init__.py
    ├── pool.py
    ├── protocols/
    │   ├── __init__.py
    │   ├── dispatcher.py
    │   ├── jsonrpc.py
    │   ├── wrappers.py
    │   └── xmlrpc.py
    ├── pyson.py
    ├── report/
    │   ├── __init__.py
    │   └── report.py
    ├── res/
    │   ├── __init__.py
    │   ├── email_reset_password.html
    │   ├── exceptions.py
    │   ├── group.py
    │   ├── group.xml
    │   ├── ir.py
    │   ├── ir.xml
    │   ├── locale/
    │   │   ├── bg.po
    │   │   ├── ca.po
    │   │   ├── cs.po
    │   │   ├── de.po
    │   │   ├── es.po
    │   │   ├── es_419.po
    │   │   ├── et.po
    │   │   ├── fa.po
    │   │   ├── fi.po
    │   │   ├── fr.po
    │   │   ├── hu.po
    │   │   ├── id.po
    │   │   ├── it.po
    │   │   ├── lo.po
    │   │   ├── lt.po
    │   │   ├── nl.po
    │   │   ├── pl.po
    │   │   ├── pt.po
    │   │   ├── ro.po
    │   │   ├── ru.po
    │   │   ├── sl.po
    │   │   ├── tr.po
    │   │   ├── uk.po
    │   │   └── zh_CN.po
    │   ├── message.xml
    │   ├── res.xml
    │   ├── routes.py
    │   ├── tryton.cfg
    │   ├── user.py
    │   ├── user.xml
    │   └── view/
    │       ├── export_form.xml
    │       ├── export_list.xml
    │       ├── group_form.xml
    │       ├── group_list.xml
    │       ├── sequence_type_form.xml
    │       ├── user_application_form.xml
    │       ├── user_application_list.xml
    │       ├── user_config_start_form.xml
    │       ├── user_form.xml
    │       ├── user_form_preferences.xml
    │       ├── user_list.xml
    │       ├── user_warning_form.xml
    │       └── user_warning_tree.xml
    ├── rpc.py
    ├── security.py
    ├── sendmail.py
    ├── status.py
    ├── tests/
    │   ├── __init__.py
    │   ├── access.py
    │   ├── copy_.py
    │   ├── export_data.py
    │   ├── field_binary.py
    │   ├── field_boolean.py
    │   ├── field_char.py
    │   ├── field_context.py
    │   ├── field_date.py
    │   ├── field_datetime.py
    │   ├── field_dict.py
    │   ├── field_float.py
    │   ├── field_function.py
    │   ├── field_function.xml
    │   ├── field_integer.py
    │   ├── field_many2many.py
    │   ├── field_many2one.py
    │   ├── field_multiselection.py
    │   ├── field_numeric.py
    │   ├── field_one2many.py
    │   ├── field_one2one.py
    │   ├── field_reference.py
    │   ├── field_selection.py
    │   ├── field_text.py
    │   ├── field_time.py
    │   ├── field_timedelta.py
    │   ├── forbidden.txt
    │   ├── history.py
    │   ├── import_data.py
    │   ├── import_data.xml
    │   ├── message.xml
    │   ├── mixin.py
    │   ├── model.py
    │   ├── modelsql.py
    │   ├── modelstorage.py
    │   ├── modelview.py
    │   ├── modelview.xml
    │   ├── mptt.py
    │   ├── multivalue.py
    │   ├── path.py
    │   ├── resource.py
    │   ├── rule.py
    │   ├── sequence.xml
    │   ├── test_access.py
    │   ├── test_backend.py
    │   ├── test_bus.py
    │   ├── test_cache.py
    │   ├── test_copy.py
    │   ├── test_descriptors.py
    │   ├── test_exportdata.py
    │   ├── test_field_binary.py
    │   ├── test_field_boolean.py
    │   ├── test_field_char.py
    │   ├── test_field_context.py
    │   ├── test_field_date.py
    │   ├── test_field_datetime.py
    │   ├── test_field_depends.py
    │   ├── test_field_dict.py
    │   ├── test_field_float.py
    │   ├── test_field_function.py
    │   ├── test_field_integer.py
    │   ├── test_field_many2many.py
    │   ├── test_field_many2one.py
    │   ├── test_field_multiselection.py
    │   ├── test_field_numeric.py
    │   ├── test_field_one2many.py
    │   ├── test_field_one2one.py
    │   ├── test_field_reference.py
    │   ├── test_field_selection.py
    │   ├── test_field_text.py
    │   ├── test_field_time.py
    │   ├── test_field_timedelta.py
    │   ├── test_filestore.py
    │   ├── test_history.py
    │   ├── test_i18n.py
    │   ├── test_importdata.py
    │   ├── test_ir.py
    │   ├── test_mixins.py
    │   ├── test_model.py
    │   ├── test_model_index.py
    │   ├── test_modelsingleton.py
    │   ├── test_modelsql.py
    │   ├── test_modelstorage.py
    │   ├── test_modelview.py
    │   ├── test_mptt.py
    │   ├── test_multivalue.py
    │   ├── test_order.py
    │   ├── test_path.py
    │   ├── test_protocols.py
    │   ├── test_pyson.py
    │   ├── test_report.py
    │   ├── test_res.py
    │   ├── test_resource.py
    │   ├── test_routes.py
    │   ├── test_rpc.py
    │   ├── test_rule.py
    │   ├── test_sendmail.py
    │   ├── test_sequence.py
    │   ├── test_tools.py
    │   ├── test_transaction.py
    │   ├── test_tree.py
    │   ├── test_trigger.py
    │   ├── test_tryton.py
    │   ├── test_union.py
    │   ├── test_user.py
    │   ├── test_wizard.py
    │   ├── test_workflow.py
    │   ├── test_wsgi.py
    │   ├── tools.py
    │   ├── tree.py
    │   ├── trigger.py
    │   ├── tryton.cfg
    │   ├── wizard.py
    │   ├── wizard.xml
    │   ├── workflow.py
    │   └── workflow.xml
    ├── tools/
    │   ├── __init__.py
    │   ├── decimal_.py
    │   ├── domain_inversion.py
    │   ├── email_.py
    │   ├── gevent.py
    │   ├── immutabledict.py
    │   ├── misc.py
    │   ├── multivalue.py
    │   ├── singleton.py
    │   ├── string_.py
    │   └── timezone.py
    ├── transaction.py
    ├── tryton.rnc
    ├── tryton.rng
    ├── url.py
    ├── wizard/
    │   ├── __init__.py
    │   └── wizard.py
    ├── worker.py
    └── wsgi.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .drone.yml
================================================
clone:
    hg:
        image: plugins/hg
        environment:
            - HG_SHARE_POOL=/root/.cache/hg
        volumes:
            - cache:/root/.cache

pipeline:
    tox:
        image: ${IMAGE}
        environment:
            - CFLAGS=-O0
            - DB_CACHE=/cache
            - TOX_TESTENV_PASSENV=CFLAGS DB_CACHE CI_BUILD_NUMBER CI_JOB_NUMBER CI_JOB_ID
            - POSTGRESQL_URI=postgresql://postgres@postgresql:5432/
        commands:
            - echo "[extensions]" >> /root/.hgrc
            - echo "hgext.share =" >> /root/.hgrc
            - echo "[share]" >> /root/.hgrc
            - echo "pool = /root/.cache/hg" >> /root/.hgrc
            - pip install tox
            - tox -e "${TOXENV}-${DATABASE}"
        volumes:
            - cache:/root/.cache
    check_dist:
        image: ${IMAGE}
        commands:
            - pip install twine
            - python setup.py sdist
            - twine check dist/*
        volumes:
            - cache:/root/.cache
    check_doc:
        image: ${IMAGE}
        commands:
            - pip install sphinx
            - python -m sphinx -T -E -W -n -b html doc _build/html
            - python -m sphinx -T -E -W -n -b linkcheck doc _build
        volumes:
            - cache:/root/.cache

services:
    postgresql:
        image: postgres
        environment:
            - POSTGRES_HOST_AUTH_METHOD=trust
        command: "-c fsync=off -c synchronous_commit=off -c full_page_writes=off"
        when:
            matrix:
                DATABASE: postgresql

matrix:
    include:
        - IMAGE: python:3.7
          TOXENV: py37
          DATABASE: sqlite
        - IMAGE: python:3.7
          TOXENV: py37
          DATABASE: postgresql
        - IMAGE: python:3.8
          TOXENV: py38
          DATABASE: sqlite
        - IMAGE: python:3.8
          TOXENV: py38
          DATABASE: postgresql
        - IMAGE: python:3.9
          TOXENV: py39
          DATABASE: sqlite
        - IMAGE: python:3.9
          TOXENV: py39
          DATABASE: postgresql
        - IMAGE: python:3.10
          TOXENV: py310
          DATABASE: sqlite
        - IMAGE: python:3.10
          TOXENV: py310
          DATABASE: postgresql


================================================
FILE: .flake8
================================================
[flake8]
ignore=E123,E124,E126,E128,E741,W503


================================================
FILE: .hgtags
================================================
951bb3311b916cb893adc5294cfb3216d2940169 1.0.0
9f5ce178a7c403a0865fd4b6c1a82a911df0e998 1.2.0
e2d31d59de7745de70199b7c340d78b7c4775723 1.4.0
64691214959ac19983f3b3d1dbb89ff693d1545c 1.6.0
af3a6063b46bf8739a513a06400fbb9858b5869b 1.8.0
3475040a8fe081b1b8609350186b779cc640fba4 2.0.0
1df3f0702c621e65279af52d1f87725747ae8fa4 2.2.0
640af4420c8eace7ee59a432bec54692f4808b20 2.4.0
36530840a1d0dce354bbaa58ec849a409d306d83 2.6.0
2893d6c3efd6df3759ab09a28ea16773a160118e 2.8.0
759c6ff44b90b8c685e9d9a4124bcd85af204649 3.0.0
b3d84aa2c3a6ed3b76bfb58a40fc687f68824c29 3.2.0
f0a9fa755cde703be54efd747f376b096ea8316c 3.4.0
1e4ba5a3f16e6afd59131b49841eb004e706619d 3.6.0
0a29a9dba7f56fbdef067772eea3f037934999c9 3.8.0
49a0caa894dae201ed4ec707f277d9859b5521fb 4.0.0
eb8949ec5bcedba563b5799f1315a0cecfee61f6 4.2.0
f253ce8ed02f4c46a69b8b2f29311ad8959698be 4.4.0
e7a6d0e8002237f624ecc8a45a6a472f7baadd08 4.6.0
321b0104a732419c11aa4926785502e0615b89c9 4.8.0
e8cadc044d59edff8a2ca73932c723d507517ec8 5.0.0
ef34e4e92d45ab2b2b2956bbb6aa8b3ca259eb13 5.2.0
32170ff46339dbc8609225791ab737a0f3eb0291 5.4.0
5738a22adbb45390167194e4089adc46c6b638a3 5.6.0
e21456b81972188261b8a6fc876afc18f641c85b 5.8.0
2164597ffa5f4f0443e4804944b30f5491070990 6.0.0
1252631aa5277267887251090d6e2f7ed6d41503 6.2.0
2593216de16bfca661479ed068b87fd0e83260e0 6.4.0
e5934d7675cbdbf6e534ea4a01f9e1d0792e22b4 6.6.0


================================================
FILE: .isort.cfg
================================================
[settings]
multi_line_output=4
known_first_party=trytond


================================================
FILE: CHANGELOG
================================================
* Cache RPC call for class method selection

Version 6.6.0 - 2022-10-31
--------------------------
* Bug fixes (see mercurial logs for details)
* Add sql_id method to Reference field
* Use declarative index definition for ModelSQL
* Add configuration entries for unaccent and similarity functions
* Add authentication services
* Schedule actions using server timezone
* Reset the user sessions less often
* Add straight values to wizard state view
* Add strip option to Char fields
* Strip only one wildcard
* Manage web extension origin as null
* Remove same types restriction on PYSON If
* Allow PYSON size of fields to be None
* Add command line completion with argcomplete
* Include record name and value in validation error message
* Add header parameter on export data
* Enforce certificate validation for SMTP connection (issue11564)
* Use singleton for TableHandler

Version 6.4.0 - 2022-05-02
--------------------------
* Bug fixes (see mercurial logs for details)
* Use unittest discover
* Add module tutorial
* Test all XML view and SVG icon files are used
* Add notification message
* Add validate_fields to ModelStorage
* Drop support for PyPy and psycopg2cffi
* Use a set for field's depends
* Relax the constraint on a field's depends
* Include only needed fields when fetching a view definition
* Make warning check re-entrant
* Manage DatabaseDataError in ModelSQL
* Remove support for pysqlite2
* Do not import empty One2Many data
* Deduplicate entries in domain inversion's simplify
* Prevent to create and delete singleton
* Allow CORS on root path
* Allow button access to be deactivated
* Always return tuple for MultiSelection
* Use default selectors instead of select
* Add batch option to push queue tasks
* Support ref value for reference field
* Enforce ref model in XML data
* Do not resolve entities by default with lxml (issue11219)
* Use defusedxml to parse XML (issue11244)
* Use dictionary as search_order on Reference field
* Retry sending email on temporary failure
* Order not sorted Selection by index definition
* Add optional column on tree view
* Use dictionary as domain on Reference field
* Include model, field and column in import data error message
* Support limit and offset to ModelSQL count search and search_count
* Apply view inheritance to board
* Add RPC view_get method to View
* Apply view inheritance to all matching elements
* Limit board action domain to active id and ids
* Remove entropy check on password
* Set view_id in the context when calling view_attributes
* Add ip_address and device_cookie login method options
* Add support for Python 3.10
* Remove support for Python 3.6
* Add creatable attribute on tree and form views
* Fill local cache of Function field instances with values
* Cache Function field getter without context in readonly transactions
* Use expire delay instead of UTC datetime in reset password email
* Use RENAME and DROP COLUMN with SQLite backend
* Support window functions with SQLite backend
* Use JSONB to store Dict field on PostgreSQL backend

Version 6.2.0 - 2021-11-01
--------------------------
* Bug fixes (see mercurial logs for details)
* Allow to cast to date with timezone
* Support create/delete attribute in view
* Skip default values when copying records
* Use local cache for relation fields in readonly transactions
* Add format method to DictSchemaMixin
* Allow modify record name on the reports
* Add methods to format number and symbol on Lang
* Add format number with symbol on Report
* Allow locking tables by calling ModelSQL.lock without records
* Add test on domain of relation fields
* Add stored path as alternative to MPTT
* Activate and upgrade modules from configuration wizard
* Add set_from_header in email tools
* Add grouping attribute to numeric widgets
* Ensure with a test that objects in the Pool have __slots__
* Use bigdecimal tag for XML-RPC
* Use tuple in Dict value instead of list
* Do not set record name on title of report get_email
* Add node to id of status
* Use ImmutableDict for Transaction context
* Use UNION for 'Or'-ed domain with subqueries
* Add remove_forbidden_chars in tools
* Manage errors during non-interactive operations
* Add estimation count to ModelStorage
* Support empty digits in format_number of Report
* Add digits mixin
* Use argon2 or scrypt to hash password by default
* Allow PYSON Expression as key for PYSON In with dict object
* Add method to format warning name with records
* Add option to trytond-console to start a readonly transaction
* Add support for werkzeug 2.0
* Combine search and get_keys in DictSchemaMixin
* Make language code unique
* Support base64 encoded data in ModelStorage.import_data
* Add BOOL_AND and BOOL_OR to SQLite backend

Version 6.0.0 - 2021-05-03
--------------------------
* Bug fixes (see mercurial logs for details)
* Allow column sql types to be tested from the table handler
* Add support for database connection parameters to configuration URI
* Use immutable datastructures for Dict and MultiSelection fields
* Skip warnings for non-interactive operations
* Check rule only if _check_access is set
* Add statistics to Cache
* Add support for avatars
* Add status command
* Add document widget on form view
* Add full text and similarity search and FullText field
* Add URL type to icon
* Use instance method to get next sequence value
* Store the sequence type directly on sequence
* Allow sending email with record's attachments
* Add which records to use for actions
* Add parent to group to inherit accesses
* Add __access__ to Model
* Add route wrapper to allow null origin
* Add header grouping on report
* Protect trusted devices against brute force attack
* Make ModelView.parse_view public
* Add help for each value to selection and multiselection
* Use safe_join in SharedDataMiddlewareIndex (issue10068)
* Use menu name for window opened from menu
* Add trigonometric functions to sqlite backend
* Allow skipping user warnings globally
* Add validate option to trytond-admin
* Refresh pool of other processes
* Add clear_all method to Cache
* Support Genshi element directives in HTML editor
* Add firstline tool
* Add support for Python 3.9
* Skip access check on ModelStorage instances
* Eager load Function field with same multiple getter
* Support other methods for button_change decorator
* Allow copying Python instances of Model
* Add all buttons to default form view
* Unify PYSON string format
* Forbid all white spaces except space in Char field

Version 5.8.0 - 2020-11-02
--------------------------
* Bug fixes (see mercurial logs for details)
* Remove support for Python 3.5
* Support import of timedelta data
* Add symbol widget
* Add sql_pairing tool
* Add format_datetime to Report
* Allow sharing view searches
* Allow overriding digits in Lang.currency and Report.format_currency
* Add record name in report filename
* Add deletable and writable state from ir.rule to read
* Add language attribute to data tag
* Add e-mail template
* Send e-mail on behalf of user
* Register mixins to generic Report class
* Cache in memory the report template instances
* Support Genshi's MsgDirective in report
* Support PYSON comparison of date and datetime
* Add cron task to clean old queue tasks
* Add option to run cron once
* Add defaults option to route
* Add escape_wildcard in tools
* Add option to ensure emails are sent
* Allow keyword action for all models
* Add sortable_values in tools
* Remove default colors on graph and calendar
* Add model, record and records attributes on Wizard
* Check read access of wizard records
* Add cached_property in tools
* Use custom class to store record data
* Do not write to existing targets on xxx2Many add
* Add configuration check
* Add support for properties to fields.depends
* Allow combining authentication methods together
* Add context to export CSV route

Version 5.6.0 - 2020-05-04
--------------------------
* Bug fixes (see mercurial logs for details)
* Call getter function when accessing Function field on unsaved record
* Add language configuration wizard
* Allow copying attachments and notes to created records
* Add link button on form
* Support explicit delete and remove for saving and on_change xxx2Many
* Add export_data_domain to ModelStorage
* Add route to export CSV data
* Add test on target of relation fields
* Add width and height attributes on calendar view
* Add default database name configuration
* Add retry option to report convert
* Add depends fields on view_attributes
* Simplify trigger action
* Run trigger in the queue
* Do not copy Binary content with file_id
* Replace memoize with functools.lru_cache
* Add support for Python 3.8
* Set all fields readonly for inactive record
* Enable check_access context when checking wizard access (issue9108)
* Add option to send test email with trytond-admin
* Add editable on calendar view
* Add xalign and yalign to group
* Add MultiSelection entry to Dict field
* Allow empty order clause
* Change editable tree attribute into boolean
* Send default order to clients
* Replace advisory lock by SKIP LOCKED in queue pulling
* Load WSGI middleware from configuration
* Add help text to Dict keys
* Update button_action with returned values
* Use direct access to backend classes
* Add weasyprint support
* Add slugify tool
* Add is_secure, host and http_host to url module
* Add __href__ to URLMixin
* Add validate attribute to wizard's Button
* Return 400 instead of 500 for Tryton exception
* Fill the reverse field in the One2Many setter
* Drop support for skiptest attribute on xml files
* Remove implicit field names in ModelStorage.search_read

Version 5.4.0 - 2019-11-04
--------------------------
* Bug fixes (see mercurial logs for details)
* Improve tests on depends
* Add permission groups on export
* Retry cron job on DatabaseOperationalError
* Add visual context on tree view
* Add start value to PYSON Date and DateTime
* Add MultiSelection field
* Support dot notation on PYSON Eval
* Add __slots__
* Pass app and request to wsgi error handlers
* Add lazy_gettext
* Add format_timedelta to Report
* Add partial TO_CHAR support for date and datetime on SQLite
* Setup default logging for WSGI app
* Add format argument to report format_date function
* Change expand attribute into a factor
* Allow SQL expression as value of fields
* Allow customizing Dict keys order with a sequence field
* Add invalid domain in DomainValidationError
* Add domain inversion tools
* Add get_relation_fields to DictSchemaMixin
* Add level on Model.fields_get to fill relation_fields

Version 5.2.0 - 2019-05-06
--------------------------
* Bug fixes (see mercurial logs for details)
* Add sort and translate options to Reference field
* Do not create empty translations
* Replace dsn by params to connect to postgresql
* Simplify cron
* Add duration on Cache
* Add strip wildcards helpers
* Add list-form view
* Do not set id for on_change calls if cached
* Add cache on RPC
* Remove support for Python 3.4
* Allow to update record when importing data
* Set context on record instantiated by Field.__set__
* Set context when reading related fields
* Check read access on field in search order (issue8189)
* Add base64 converter to URL map
* Add HTML widget
* Support import of native numeric, date and datetime data
* Add day view on calendar
* Raise NotImplementedError when setting Function field without setter
* Add exports in view_toolbar_get
* Add resources method to ModelStorage
* Validate selection format in Dict schema
* Allow to extend Field's string and help
* Add console
* Add Model.__names__ to retrieve model and field names
* Add size attribute on image tag
* Allow to use channel to synchronize Cache
* Display ids and rule names on access error
* Move field definition from Model to Field
* Use number of verbose flag as log level
* Add coroutine concurrency option
* Add increasing delay on database operational error retry
* Allows to lock records for update
* Remove _nocache on Transaction
* Make Cache transactional
* Allow to search on key's value of Dict
* Allow to order Dict by key's value
* Do not store keys with null value in Dict
* Add cache timeout for web
* Allow the bus requests to be redirected to another host
* Add support for CORS
* Add extras modules to ModuleTestCase
* Add timeout to Report.convert
* Allow records from XML with noupdate to be deleted
* Add ir.calendar for month and day
* Rename languages: hu_HU, it_IT and pt_BR into hu, it and pt
* Define custom exceptions
* Remove _error_messages, raise_user_error and raise_user_warning
* Remove ModelStorage._constraints
* Add ir.message
* Add check on ModelSQL for positive id
* New API to read related fields
* Remove implicit fields names in ModelStorage.read
* Check read access on field in search domain (issue7766)
* Add active field on ModelAccess, ModelFieldAccess and Group
* Use write mode by default to check create and delete of resources

Version 5.0.0 - 2018-10-01
--------------------------
* Bug fixes (see mercurial logs for details)
* Allow non translatable reports
* Replace hard coded 'state' by '_transition_state' in copy
* Support dotted notation in copy default
* Allow callable in copy default
* Add bus system
* Allow to set any default configuration value from environment
* Clear existing session when password is changed
* Manage session with max_age and timeout
* Use passlib to hash and update password
* Remove unique constraint on attachment name
* New icons
* Add pyson TimeDelta
* Remove button if it is not allowed to access some of its dependant fields
* Add support for Python 3.7
* Add transactional queue and workers
* Add __table_handler__ to ModelSQL
* Support partial index
* Allow to use SQL expression for index action
* Add cache clean timeout configuration
* Implicit conversion to boolean in PYSON statement
* Add domain to dictionary schema
* Fill main language in ir.configuration at database initialization
* Remove support for Python 2.7
* Check Rule also after modification
* Check Rule after indirect fields
* Allow to define view id in switch client action
* Do not validate Function fields even with setter
* Simplify the creation of dependencies graph
* Make depends on methods generic to any method
* Add width/height attribute to notebook
* Allow to call set_lang with None and language instance
* Add hostname configuration to list database
* Add tree mixin
* Rename "install-dependences" into "activate-dependencies"
* Use recursive common table expression for child_of/parent_of operators
* Add sql_cast on Field

Version 4.8.0 - 2018-04-23
--------------------------
* Bug fixes (see mercurial logs for details)
* Add index method to order field set calls
* Add deactivable mixin
* Ensure active field is present on tree view
* Manage depends xml attribute on field tag
* Add expand attribute on group tag
* Add depends on Pool.register
* Add Exclude constraint
* Allow to perform unaccented searches on Char fields
* Always raise exception in table handler
* Simplify API for Session: new, remove, check and reset
* Ensure that all buttons are registered in ir.model.button
* Make trytond-admin ask for admin email
* Add option to set admin email with trytond-admin
* Add option to reset admin password with trytond-admin
* Add reset password button
* Add depends on Button
* Add ModelData.has_model cache for ModelStorage.check_xml_record
* Limit authentication attempt per IP network
* Manage 'X-Forwarded' headers from proxies
* Add '_request' attribute to Transaction context
* Delete translations on deletion only when model has translatable field
* Remove MySQL backend
* Add keyword attribute to button tag
* Allow field name on image tag
* Remove unoconv and call soffice directly
* Allow to include mixin to pool objects
* Improve validation of PYSON domain
* Use JSON canonical form for Dict value
* Remove rules on user
* Add monetary formatting to language
* Add exceptional parent language
* Add get method on ir.lang
* Convert format, currency and strftime of ir.lang into instance methods

Version 4.6.0 - 2017-10-30
--------------------------
* Bug fixes (see mercurial logs for details)
* Add support for Python 3.6
* Remove support for Python 3.3
* Move handling of sequences to the Database object
* Allow to add tests through entry points
* Add translated descriptor for Reference field
* Implement alter_type and alter_size for sqlite backend
* Add a maximum size for request
* Add support for single record report
* Add support for Flat OpenDocument
* Add get_email in trytond.report
* Replace plain extension by txt
* Support test database cache for remote postgresql
* Increase session randomness to 32 bytes
* Allow to specify datetime related values in XML files
* Add environment variables to wsgi script
* Add unique ids check on RPC
* Assert unique records on ModelView.button and Workflow.transition
* Add test for function field methods
* Add option install module dependencies with trytond-admin
* Add localhost_name and timeout as get_smtp_server uri parameters
* Delete missing modules not activated when updating module list
* Remove empty pages from notebook
* Allow to store Dict as JSON on the database

Version 4.4.0 - 2017-05-01
--------------------------
* Bug fixes (see mercurial logs for details)
* Sanitize path in file_open against suffix (CVE-2017-0360)
* Add constraint on user password
* Remove Property field
* Add MultiValueMixin and ValueMixin
* Use sql type in column creation
* Use generic SQL type in field and let backend determine the SQLType
* Add filter to xxx2Many fields
* Add NULLS ordering
* Add context domain on ir.action.act_window
* Allow None limit in action window
* Add has_window_functions on Database
* Allow Many2One on ModelSQL to target ModelStorage
* Manage Cache in Transaction
* Allow to register multiple exit functions on Transaction
* Return 429 status when too many login attempts
* Add set_rpc on Field
* Add has_select_for on Database
* Store custom report translation in separate module
* Add form action keyword for set/synchronize translation on report and view
* Add negative value for col attribute
* Allow to use domain_<field name> method with Function fields
* Validate wizard definition on module tests
* Remove order constraint on register ModelSQL
* Add relate from report to translations

Version 4.2.0 - 2016-11-28
--------------------------
* Bug fixes (see mercurial logs for details)
* Add toolbar attribute for richtext widget
* Add PYSON widget
* Allow to define the text color and background color in calendar view
* Allow to override cache implementation
* Add button rule
* Allow to specify translatable languages in trytond-admin
* Add datetime_field on Reference
* Merge Spanish's into Spanish (Latin American)
* Do not check write access on model for wizard with groups
* Add user application
* Add sequence_ordered
* Remove most country specific code in languages
* Add support for derivative translations
* Remove IDENTIFIER regexp on ir.model and ir.model.field
* Enforce suffix and prefix to have id or name
* Sanitize path in file_open (CVE-2016-1242)
* Prevent read of user password hash (CVE-2016-1241)
* Add database dump cache for tests
* Remove unused tools: find_in_path, exec_command_pipe and mod10r
* Implementation of drop_column for SQLite
* Allow to pass many configuration files
* Remove translate on field name of User
* Allow to define the default mode in calendar view
* Use 'default_rec_name' context key in Model.default_get
* Add option to store Attachment in database
* Allow to store Binary field in filestore
* Add filestore module
* Allow None in Greater/Less PYSON
* Add option to set admin password with trytond-admin
* Remove super password
* Remove database management from RPC
* Remove ModelView.view_header_get
* Remove string attribute from views
* Don't check write access on model for button with groups
* Limit readonly state for xxx2Many
* Add option to update modules list with trytond-admin
* Use home directory as default path for database and web root.
* Add count option on Action Window Domains
* Remove window_name on Action Window
* Return the calling keyword in ActionKeyword.get_keywords
* Add customizable login process
* Allow to customize the substitutions used on sequence
* Allow PYSON in tree_invisible attribute

Version 4.0.0 - 2016-05-02
--------------------------
* Bug fixes (see mercurial logs for details)
* Add sendmail module to send transactional email
* Support Two-Phase Commit in Transaction
* Allow Report to generate text plain, XML, HTML and XHTML
* Add workflow graph on ir.model
* Add context model on ir.action.act_window
* Switch to WSGI API
* Limit the login size in LoginAttempt
* Remove LocalDict from tools
* Add LRUDictTransaction
* Follow PEP-0249 for Database, Transaction and Cursor
* Add Python3 support
* Make TestCase create and drop its database
* Add with_transaction decorator for tests
* Add note on resources
* Add 'where' operator for xxx2many fields
* Strip and unquote double-quote from Postgresql schema in search_path
* Move webdav into a separate module
* Don't read historized user when evaluating record rules as it could lead to
  past privilege escalation.
* Only rebuild mptt tree if left or right values have their default values
* Allow nested inherited view
* Add button on cron to run once
* Check all fields when writing a sequence of records, values (CVE-2015-0861)
* Add view_ids on tree view
* Add parent_of operator
* Enforce type of inheriting view
* Use instance context in translated descriptor of Selection

Version 3.8.0 - 2015-11-02
--------------------------
* Bug fixes (see mercurial logs for details)
* Add test for all field methods
* Load po files also in 'override' subdirectory
* Add support for float and integer on Property fields
* Remove foreign-key on create_uid and write_uid
* Prevent deletion of any user
* Manage PostgreSQL schema
* Remove colors attribute on tree view
* Remove style on Report
* Add StateReport to Wizard
* Allow to override ModelSQL._table
* Allow to import backend from entry points
* Add reversed operators to PYSON expressions
* Explicity raise error when creating/writing/deleting models with table_query
* Use CURRENT_TIMESTAMP instead of now
* Use Constraint instance in ModelSQL._sql_constraints
* Only return default record if no domain supplied on ModelSingleton search
* Rule.domain_get returns a domain and Rule.query_get a SQL query
* Add target_search option to Many2One
* Add tables argument to ModelSQL.search_domain
* Rename ir.module.module* into ir.module*

Version 3.6.0 - 2015-04-20
--------------------------
* Bug fixes (see mercurial logs for details)
* Use bytes and bytearray for Binary
* Add button_change
* Add support for PyPy
* Add support for psycopg2cffi
* Add noeval on PYSONDecoder
* Add __repr__ to PYSON
* Remove safe_eval
* Add ModelView.view_attributes
* Add pyson attribute on data field tag
* Changed into JSON:
    - record rule domain
    - trigger condition
    - 'states', 'domain', 'spell' and 'colors' view attributes
    - view domain
    - 'email', 'domain', 'context', 'order' and 'search_value' action fields
* Add product attribute on form view for One2Many
* Remove float_time widget
* Add TimeDelta field
* search_global yields record instead of id
* Add ModelTestCase
* Add test for missing default model access
* Report API refactorization
* Add test for access rights of menu and actions
* Allow to use the dotted notation for order parameters
* Use action_id to find report to use
* Allow custom StateView without Model
* Remove Pool.object_name_list
* Add translated descriptor for Dict field
* Clean private context keyword in RPC
* Add cache section in configuration
* Use dualmethod on ModelStorage.save
* New API for on_change: instance changes
* Add restore_history_before on ModelSQL
* Remove img_{width,height} form attributes

Version 3.4.0 - 2014-10-20
--------------------------
* Bug fixes (see mercurial logs for details)
* Use literal_eval instead of safe_eval (CVE-2014-6633)
* Prevent double underscore in safe_eval (CVE-2014-6633)
* Add pre-validation on button
* Model and Field access checked only if _check_access is set
* Add check_access to RPC
* Add check_access to Wizard and Report
* Add support for domain_<field name> method
* Refactor configuration file and command line
* Use the context of the relation field for instanciation
* Use a configuration field for logging
* Add translated descriptor for Selection field
* Add tree_state attribute on tree view
* Allow to sync XML data
* Remove on_change calls in Model.default_get
* Add group call to on_change
* Add UnionMixin
* Allow to disable sorting of dictionary field's selection
* Add active field to views of action window
* Make global cache depends on explicit context keys
* Don't add to global cache Binary fields
* Add MatchMixin
* Add image widget to tree
* Remove context, current_date and time from record rule evaluation

Version 3.2.0 - 2014-04-21
--------------------------
* Bug fixes (see mercurial logs for details)
* Add restore_history to ModelSQL
* Add history revisions
* Add the multi selection widget
* Add index to one2many's on_change
* Remove auto-refresh on Action Window
* Add support of domain for non-relation field
* Manage microseconds in JSON-RPC and XML-RPC
* Remove Sha field
* Add password widget
* Add Len to PYSON
* Use bcrypt to hash password if possible
* Use a sequence of ids, values to set fields
* Client side actions on button and wizard
* Add depends attribute to data tag
* Add tree_invisible attribute to button in tree view
* Drop support of Python 2.6
* Deprecate on_change, on_change_with, selection_change_with and autocomplete
  field arguments
* Add fields.depends decorator
* Add run-tests
* Validate only modified and dependant fields on model write
* Improve error messages by showing the failing value
* Remove relation field actions:
    - delete_all
    - unlink_all
    - set
* Rename relation field action unlink into remove
* Use a sequence of records, values in write
* set_context of Transaction.set_user is restricted to root
* Add a "copy" action to One2Many and Many2Many's set method
* Force UTC as timezone (migration script available on tryton-tools)
* Add relation_field for many2one

Version 3.0.0 - 2013-10-21
--------------------------
* Bug fixes (see mercurial logs for details)
* Allow customization of translation in po files
* Use python-sql
* Add convert_domain method on Fields
* Add sql_format and sql_type methods on Fields
* Allow to return a full domain for Function.searcher
* Replace static backend by dynamic get method
* Replace order_field by order_<field name> method
* Allow field One2One in check_recursion
* Remove the default order on MPTT
* Add grouped attribute to data tag
* Store selection tree state
* Add order to Action Window
* Add factor on number fields
* Add calendar view
* Remove request

Version 2.8.0 - 2013-04-22
--------------------------
* Bug fixes (see mercurial logs for details)
* Allow to search on target of Reference field
* Remove _inherits
* Add dynamic label
* Add prefix, suffix on tree view
* Replace _constraints with validate in ModelStorage
* Add selection_change_with on Selection and Reference fields
* Add Dict fields
* Remove unique constraint on model and field access
* Use lists of values in create
* (Field, Operator, Operand) are replaced by Domain on Rule
* Add global search
* Replace view shortcut by menu favorite
* Store default language in database
* Add icon attribute on fields
* Prevent Wizard State name to start with '_'
* Add completion attribute for Many2One, Many2Many and One2Many
* Add ViewSearch
* Add domains on Action Window

Version 2.6.0 - 2012-10-22
--------------------------
* Bug fixes (see mercurial logs for details)
* Add pre-validation
* Allow to use XML file for views
* Add RPC definition
* Repace BrowseRecord by Model instance
* Replace Cache decorator by a simple LRU Cache
* Remove Cacheable
* Remove _description
* Rename _name by __name__
* Use class in Pool
* Fix search button clause in ModelButton.get_groups (CVE-2012-2238)
* Merge all kind of buttons
* Use XML id for board action instead of id
* Add states attribute to notebook
* Allow to use tuple for Reference
* Add constant interpolation on line graph
* Add create/delete field access
* Add dynamic size limit on the One2Many, Many2Many and Char
* Replace __tryton__.py by tryton.cfg
* Allow to use Reference field in One2Many & Many2Many
* Remove hexmd5 from ModelView.fields_view_get
* Allow client to manage model access
* Add time format validation
* Remove ModelSQL.default_sequence

Version 2.4.0 - 2012-04-23
--------------------------
* Bug fixes (see mercurial logs for details)
* Don't allow rpc call on ModelStorage without ModelView (CVE-2012-0215)
* Add shared WebDAV
* Remove workflow module
* Simplify workflow engine
* Add ir.model.button for access rights
* Replace fill by expand
* Integer, Numeric and Float allow None as value
* NULL value is None and not False
* Replace user action by a list of actions
* Add group call to on_change_with
* Allow to get fuzzy translation
* Allow to customize server timezone
* Add richtext widget for WYSIWYG editor
* Add support of fields.Time
* Replace nested view by reference id
* Remove underscore to ir.translation methods
* Add default database language code
* Add extras_depend to module definition
* Store session in database
* New Wizard design
* Add pyson.Id
* Use XML-RPC struct for Decimal and Date
* Remove change_default on fields

Version 2.2.0 - 2011-10-24
--------------------------
* Bug fixes (see mercurial logs for details)
* Remove name field in ir.property
* Add wizard to show views
* Switched from .csv to .po for translations
* Search on Many2One fields include inactive records
* Change select on fields into Boolean
* Change format of search_value on ir.action.act_window
* Manage relation field access
* Support size format in context for Binary fields
* Use buffer for Binary fields
* No more store Binary fields in base64
* Remove tabpos attribute on notebook
* Make PYSON more Pythonic
* Add readonly on Transaction
* Add has_returning on Cursor
* Remove use of python code in workflow XML
* Use SQL sequence on PostgreSQL for ir.sequence
* Allow to specify more than one interface
* Use unoconv for report format conversion
* Allow to use any Opendocument as report template
* Drop NetRPC and activate JSON-RPC by default
* Remove ir.action.wizard_size
* Rename expand and fill attributes into yexpand and yfill
* Add xalign and yalign as field attributes
* Drop support of Python 2.5
* Remove support of Many2Many field in record XML
* Change Pool into a Singleton
* Remove support of zipped modules

Version 2.0.0 - 2011-04-26
--------------------------
* Bug fixes (see mercurial logs for details)
* Use md5 hash for indexing translation
* Merge tree and list views
* Added autocompletion on fields.Char
* Remove ir.default
* Add type, last user and last modification on ir.attachment
* Rename datas into data on ir.attachment
* Add new configuration option to prevent database listing
* Add warning to wizards
* Add server-side icons
* Add support for file link to BinaryField
* Add model field access
* Add loading attribute on fields
* Remove priority attribute on fields
* Model doesn't convert anymore ids for inherited methods
* Remove required attribute on Boolean fields
* Add One2One field
* Add AUTOINCREMENT to sqlite primary key

Version 1.8.0 - 2010-11-01
--------------------------
* Bug fixes (see mercurial logs for details)
* Add timestamp sequence
* New transaction management
* Make _timestamp numeric instead of datetime to work with XML-RPC and JSON-RPC
* Add ir.trigger to trigger ModelStorage change
* Add default value to Boolean fields at database level

Version 1.6.0 - 2010-05-08
--------------------------
* Bug fixes (see mercurial logs for details)
* Add symbol parameter to formatLang
* searcher on Function fields take only one domain clause as argument
* Use a Reference field on ir.attachment to store resource informations
  Improve the ir.attachment views to be usable on the client side
* Use basic access authentication for XML-RPC
* Replace child{1,2} attributes in xml views by a unique child
* Models that uses _inherits will search in inherited parents for missing functions
* Remove ids from on_change* calls
* Improve search on translatable fields
* export_data return empty value for invisible fields
* Don't allow to use float in Numeric fields
* set/get function on Fields take a list of ids
* New interface for Function/Property fields
  Take a Field as first argument instead of many separate arguments
  Remove static arguments
* Fix Float and Numeric for lost of precision
* Add decimal digits validation on fields
* Improve unittests to run trytond from tests
  Use sqlite as default backend
  Add skiptest attribute to data tag
  Add option to test_tryton to run tests from all modules
* Add MySQL backend
* Refactoring by validation with pylint
* Modify ondelete attribute of Many2One according to required attribute value
* Refactor import_data of ModelStorage
* Raise exception when search function is missing on Function fields
* Add LRU memoization, use it to cache compiled code for safe_eval.
* Add PySON to replace python string evaluation on client side
* Add JSON-RPC
* Add groups on Sequence Types and add rules on sequence based on it.
* Ignore Fields that starts with "_"
* Add comment on table and field for postgresql backend
* Remove egenix-mx-base and replace it by python-dateutil
* Add cache to safe_eval
* Rename HttpDaemon into XMLRPCDaemon
* Improve TranslateFactory to fetch all translations for a report in one query
* Handle displayname on webdav.collection
* Handle current-user-privilege-set on webdav.collection

Version 1.4.0 - 2009-10-19
--------------------------
* Bug fixes (see mercurial logs for details)
* Add datetime_field on xxx2Many to use a specific _datetime when reading the related record
* Add new tool safe_eval
* Handle sequence and history renaming when renaming table
* Add old_password to set_preferences of res.user on password change
* Allow to drop constraint, index and foreign key with custom table name
* Added column_rename on TableHandler
* Add new tool reduce_ids
* Add limit_clause function on cursor
* Fill the cursor cache at search
* Allow rpc on today of ir.date
* Use the module dependency order to apply views that inherits
* Allow to update database at the end of restore
* Add ir.model.access check get and set of ir.property
* Add ModelSingleton
* Move login test in res.user
* Rename osv into model on workflow
* Add logout method
* Move BrowseRecord cache onto the cursor except for Function fields
* Don't order search result if order value is []
* Add reload of modules if files have changed
* Add salt to sha of password
* Add strftime to ir.lang to handle locale's format
* Add sqlite backend
* Add validate test for required and size
* Remove _sequence on ModelSQL
* Use gzip in pysocket
* Add gzip encoding for XML-RPC
* Add report name in the result of Report.execute
* Add ir.action.wizard_size to store prefered wizard size
* Add delete_all action on One2Many field
* Read, write, create, delete permission on record rules
* Add reset_default method to ir.default
* Doesn't append '%' to "like", "ilike" clauses
* Handle database dump and restore with password
* Add float_time attribute in fields view

Version 1.2.0 - 2009-04-20
--------------------------
* Bug fixes (see mercurial logs for details)
* Add delete of foreign keys with ondelete CASCADE
* Add write for foreign keys with ondelete SET NULL
* Add datetime_field on Many2One to use a specific _datetime when reading the related record
* Use _datetime in context to read record value at specific datetime
* Add _history_table on ModelSQL to historize change on records
* Allow to use related fields (many2one and reference) in read
* Use rec_name function field instead of name_get and name_search
* Use a new Pool for objects
* Move workflow in ModelWorkflow and the workflow module
* Remove Service and LocalService objects
* New netrpc/xmlrpc syntax
* copy on ModelStorage copies one2many directly on the right record
* Search on translated field will search only on translated value
* Add active field on ir.action to allow better override of reports
* Add depends attributes on Column
* Make Modified Preorder Tree Traversal respects the default order of the model
* Add replace_attributes for xpath tag
* Add email parameter on report action
* Allow to inherit views from an other model
* Add user warnings
* Allow to use a list of id for copy method
* Use one lock per database
* Improve netrpc communication speed
* Add contextual domain on inherited views
* Allow to use globals in domain and states
* Add translate attribute on Selection field
* Use explicit join in search SQL query
* Fix for host with IPv6 enable but without default IPv6 route
* Allow egg installation

Version 1.0.0 - 2008-11-17
--------------------------
* Initial release


================================================
FILE: COPYRIGHT
================================================
Copyright (C) 2004-2008 Tiny SPRL.
Copyright (C) 2007-2022 Cédric Krier.
Copyright (C) 2007-2013 Bertrand Chenal.
Copyright (C) 2008-2022 B2CK SPRL.
Copyright (C) 2011 Openlabs Technologies & Consulting (P) Ltd.
Copyright (C) 2011-2022 Nicolas Évrard.
Copyright (C) 2020-2021 Maxime Richez
Copyright (C) 2020-2021 SALUC SA

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: MANIFEST.in
================================================
include CHANGELOG
include COPYRIGHT
include LICENSE
include README.rst
include doc/*
include trytond/ir/ui/icons/LICENSE
recursive-include doc *.rst
recursive-include doc *.po
recursive-include doc *.pot


================================================
FILE: README.rst
================================================
trytond
=======

The server of Tryton.
Tryton is business software, ideal for companies of any size, easy to use,
complete and 100% Open Source.
It provides modularity, scalability and security.


================================================
FILE: bin/trytond
================================================
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import glob
import logging
import os
import sys
import threading

try:
    import argcomplete
except ImportError:
    argcomplete = None

DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
    '..', '..', 'trytond')))
if os.path.isdir(DIR):
    sys.path.insert(0, os.path.dirname(DIR))

import trytond.commandline as commandline
from trytond.config import config, split_netloc

parser = commandline.get_parser_daemon()
if argcomplete:
    argcomplete.autocomplete(parser)
options = parser.parse_args()
commandline.config_log(options)
extra_files = config.update_etc(options.configfile)

if options.coroutine:
    # Monkey patching must be done before importing
    from gevent import monkey
    monkey.patch_all()

from trytond.modules import get_module_info, get_module_list
from trytond.pool import Pool
# Import trytond things after it is configured
from trytond.wsgi import app

with commandline.pidfile(options):
    Pool.start()
    threads = []
    for name in options.database_names:
        thread = threading.Thread(target=Pool(name).init)
        thread.start()
        threads.append(thread)
    for thread in threads:
        thread.join()
    hostname, port = split_netloc(config.get('web', 'listen'))
    certificate = config.get('ssl', 'certificate')
    try:
        if config.getboolean('ssl', 'certificate'):
            certificate = None
    except ValueError:
        pass
    privatekey = config.get('ssl', 'privatekey')
    try:
        if config.getboolean('ssl', 'privatekey'):
            privatekey = None
    except ValueError:
        pass
    if certificate or privatekey:
        from werkzeug.serving import load_ssl_context
        ssl_args = dict(
            ssl_context=load_ssl_context(certificate, privatekey))
    else:
        ssl_args = {}
    if options.dev and not options.coroutine:
        for module in get_module_list():
            info = get_module_info(module)
            for ext in ['xml',
                    'fodt', 'odt', 'fodp', 'odp', 'fods', 'ods', 'fodg', 'odg',
                    'txt', 'html', 'xhtml']:
                path = os.path.join(info['directory'], '**', '*.' + ext)
                extra_files.extend(glob.glob(path, recursive=True))

    if options.coroutine:
        from gevent.pywsgi import WSGIServer
        logger = logging.getLogger('gevent')
        WSGIServer((hostname, port), app,
            log=logger,
            error_log=logger,
            **ssl_args).serve_forever()
    else:
        from werkzeug.serving import run_simple
        run_simple(hostname, port, app,
            threaded=True,
            extra_files=extra_files,
            use_reloader=options.dev,
            **ssl_args)


================================================
FILE: bin/trytond-admin
================================================
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
import sys

try:
    import argcomplete
except ImportError:
    argcomplete = None

DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
    '..', '..', 'trytond')))
if os.path.isdir(DIR):
    sys.path.insert(0, os.path.dirname(DIR))

import trytond.commandline as commandline
from trytond.config import config

parser = commandline.get_parser_admin()
if argcomplete:
    argcomplete.autocomplete(parser)
options = parser.parse_args()
config.update_etc(options.configfile)
commandline.config_log(options)

# Import after application is configured
import trytond.admin as admin

admin.run(options)


================================================
FILE: bin/trytond-console
================================================
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
import sys

try:
    import argcomplete
except ImportError:
    argcomplete = None

DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
    '..', '..', 'trytond')))
if os.path.isdir(DIR):
    sys.path.insert(0, os.path.dirname(DIR))

import trytond.commandline as commandline
from trytond.config import config

parser = commandline.get_parser_console()
if argcomplete:
    argcomplete.autocomplete(parser)
options = parser.parse_args()
config.update_etc(options.configfile)

# Import after application is configured
import trytond.console as console

console.run(options)


================================================
FILE: bin/trytond-cron
================================================
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
import sys

try:
    import argcomplete
except ImportError:
    argcomplete = None

DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
    '..', '..', 'trytond')))
if os.path.isdir(DIR):
    sys.path.insert(0, os.path.dirname(DIR))

import trytond.commandline as commandline
from trytond.config import config

parser = commandline.get_parser_cron()
if argcomplete:
    argcomplete.autocomplete(parser)
options = parser.parse_args()
config.update_etc(options.configfile)
commandline.config_log(options)

import trytond.cron as cron
# Import after application is configured
from trytond.pool import Pool

with commandline.pidfile(options):
    Pool.start()
    cron.run(options)


================================================
FILE: bin/trytond-stat
================================================
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import curses
import datetime as dt
import math
import os
import sys
from collections import defaultdict

try:
    import argcomplete
except ImportError:
    argcomplete = None

DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
    '..', '..', 'trytond')))
if os.path.isdir(DIR):
    sys.path.insert(0, os.path.dirname(DIR))

import trytond.commandline as commandline
from trytond.config import config

parser = commandline.get_parser_stat()
if argcomplete:
    argcomplete.autocomplete(parser)
options = parser.parse_args()
config.update_etc(options.configfile)

import trytond.status as status


def main(stdscr):
    global reverse
    stdscr.nodelay(1)
    reverse = True
    processes = {}
    status_pad = curses.newpad(1, 1)
    cache_pad = curses.newpad(1, 1)

    def refresh_status():
        now = dt.datetime.now()
        height, width = stdscr.getmaxyx()

        def expired(process):
            return process['expire'] > now

        def format_status(since, id_, request):
            since = str(dt.timedelta(seconds=int(since)))
            pid, node = id_.split('@', 1)
            if len(node) > 12:
                node = node[:5] + '…' + node[:6]
            return f"{pid:>5} {node:<12} {since:>18} {request}"
        status_pad.clear()
        status = [format_status(*i) for i in sorted(
                ((msg['since'], p['id'], msg['request'])
                    for p in filter(expired, processes.values())
                    for msg in p['status']),
                reverse=reverse)]
        prow = min(len(status) + 1, height // 2)
        pcol = max(max(map(len, status), default=0), width)
        status_pad.resize(len(status) + 1, pcol + 1)
        for i, line in enumerate(status, 1):
            status_pad.addnstr(i, 0, line.ljust(pcol), pcol)
        status_pad.addnstr(
            0, 0, "{pid:>5} {node:^12} {since:>18} {request} ({n})".format(
                pid="pid",
                node="node",
                since="TIME" + ('↑' if reverse else '↓'),
                request="request",
                n=len(status),
                ).upper().ljust(pcol), pcol, curses.A_REVERSE)
        status_pad.noutrefresh(0, 0, 0, 0, prow, width - 1)

        def ratio(cache):
            if cache['hit'] or cache['miss']:
                return cache['hit'] / (cache['hit'] + cache['miss'])
            return 0

        def format_cache(name, hit, miss, ratio, size):
            return f"{hit:{size}d} {miss:{size}d} {ratio * 100:6.2f} {name}"

        cache_pad.clear()
        cache_stats = defaultdict(lambda: defaultdict(lambda: 0))
        for p in filter(expired, processes.values()):
            for cache in p['caches']:
                stats = cache_stats[cache['name']]
                stats['name'] = cache['name']
                stats['hit'] += cache['hit']
                stats['miss'] += cache['miss']
        for cache in cache_stats.values():
            cache['ratio'] = ratio(cache)
        try:
            size = math.ceil(math.log10(
                    max(s['hit'] + s['miss'] for s in cache_stats.values())))
        except ValueError:
            size = 1
        size = max(size, 4)
        caches = [format_cache(size=size, **cache) for cache in sorted(
                cache_stats.values(), key=lambda c: (c['ratio'], c['miss']),
                reverse=reverse)]
        crow = max(len(caches) + 1, (height - prow))
        ccol = max(max(map(len, caches), default=0), width)
        cache_pad.resize(crow + 1, ccol + 1)
        for i, line in enumerate(caches, 1):
            cache_pad.addnstr(i, 0, line.ljust(ccol), ccol)
        cache_pad.addstr(
            0, 0,
            "{hit:>{size}} {miss:>{size}} {ratio:>6} {name} ({n})".format(
                size=size,
                hit="hit",
                miss="miss",
                ratio="% " + ('↑' if reverse else '↓'),
                name="name",
                n=len(caches),
                ).upper().ljust(ccol), curses.A_REVERSE)
        cache_pad.noutrefresh(0, 0, prow, 0, height - 1, width - 1)

    def refresh():
        global reverse
        refresh_status()
        stdscr.refresh()

        key = stdscr.getch()
        if key == ord('q'):
            sys.exit()
        elif key == ord('r'):
            reverse = not reverse
            refresh()

    def update(data=None):
        if data:
            pid = data['id']
            data['expire'] = dt.datetime.now() + dt.timedelta(seconds=10)
            processes[pid] = data
        refresh()
    refresh()
    return status.listen(config.get('database', 'path'), update)


if not curses.wrapper(main):
    sys.stderr.write("status not supported on this platform\n")


================================================
FILE: bin/trytond-worker
================================================
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os
import sys

try:
    import argcomplete
except ImportError:
    argcomplete = None

DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
    '..', '..', 'trytond')))
if os.path.isdir(DIR):
    sys.path.insert(0, os.path.dirname(DIR))

import trytond.commandline as commandline
from trytond.config import config

parser = commandline.get_parser_worker()
if argcomplete:
    argcomplete.autocomplete(parser)
options = parser.parse_args()
config.update_etc(options.configfile)
commandline.config_log(options)

import trytond.worker as worker
# Import after application is configured
from trytond.pool import Pool

with commandline.pidfile(options):
    Pool.start()
    worker.work(options)


================================================
FILE: doc/conf.py
================================================
# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

modules_url = 'https://docs.tryton.org/projects/modules-{module}/en/{series}/'
trytond_url = 'https://docs.tryton.org/projects/server/en/{series}/'


def get_info():
    import os
    import subprocess
    import sys

    module_dir = os.path.dirname(os.path.dirname(__file__))

    info = dict()

    result = subprocess.run(
        [sys.executable, 'setup.py', '--name'],
        stdout=subprocess.PIPE, check=True, cwd=module_dir)
    info['name'] = result.stdout.decode('utf-8').strip()

    result = subprocess.run(
        [sys.executable, 'setup.py', '--version'],
        stdout=subprocess.PIPE, check=True, cwd=module_dir)
    version = result.stdout.decode('utf-8').strip()
    if 'dev' in version:
        info['series'] = 'latest'
    else:
        info['series'] = '.'.join(version.split('.', 2)[:2])

    return info


info = get_info()

master_doc = 'index'
project = info['name']
release = version = info['series']
default_role = 'ref'
highlight_language = 'none'
extensions = [
    'sphinx.ext.intersphinx',
    ]
intersphinx_mapping = {
    'python': ('https://docs.python.org/', None),
    }

del get_info, info, modules_url, trytond_url


================================================
FILE: doc/index.rst
================================================
.. _index:

=============
Tryton Server
=============

First steps
===========

* **Installation:**
  :ref:`Installation <topics-install>` |
  :ref:`Configuration <topics-configuration>` |
  :ref:`Setup a database <topics-setup-database>` |
  :ref:`Start the server <topics-start-server>`

* **Tutorials:**
  :ref:`Create a module <tutorial-module>`

The model layer
===============

* **Models:**
  :ref:`Model definition <topics-models>` |
  :ref:`Field types <ref-models-fields-types>` |
  :ref:`Domain syntax <topics-domain>` |
  :ref:`Access rights <topics-access_rights>` |
  :ref:`Triggers <topics-triggers>`

* **Wizards:**
  :ref:`Wizards definition <topics-wizard>`

The view layer
==============

* **Views:**
  :ref:`View types <topics-views>` |
  :ref:`Extension <topics-extension>`

* **Reports:**
  :ref:`Report definition <topics-reports>`

* **Actions:**
  :ref:`Actions <topics-actions>`

The development process
=======================

* **Modules**
  :ref:`Module definition <topics-modules>` |
  :ref:`Create a module <tutorial-module>`

Contents
========

.. toctree::
   :maxdepth: 2

   topics/index
   ref/index
   tutorial/index
   releases

Indices, glossary and tables
============================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`


================================================
FILE: doc/ref/backend.rst
================================================
.. _ref-backend:
.. module:: trytond.backend

=======
Backend
=======

The backend manages the database connection and schema manipulation.

.. contents::
   :local:
   :backlinks: entry
   :depth: 1

.. attribute:: name

   The name of the backend configured.

Database
========

.. class:: Database(name)

   Manage the connection to the named database.

.. method:: Database.connect()

   Connect to the database and return the instance.

.. method:: Database.get_connection([autocommit[, readonly]])

   Retrieve a connection object as defined by :pep:249#connection.
   If autocommit is set, the connection is committed after each statement.
   If readonly is set, the connection is read only.

.. method:: Database.put_connection(connection[, close])

   Release the connection.
   If close is set, the connection is discarded.

.. method:: Database.close()

   Close all connections.

.. classmethod:: Database.create(connection, database_name)

   Create the named database using the connection.

.. classmethod:: Database.drop(connection, database_name)

   Drop the named database using the connection.

.. method:: Database.list([hostname])

   Return a list of Tryton database names.
   ``hostname`` filters the databases with the same configured hostname.

.. method:: Database.init()

   Initialize the database schema.

.. method:: Database.test([hostname])

   Return if the database is a Tryton database.
   If ``hostname`` is set, it checks also if it has the same configured
   hostname.

.. method:: Database.nextid(connection, table)

   Return the next ID for the ``table`` using the ``connection``.

   .. note:: It may return ``None`` for some database.

.. method:: Database.setnextid(connection, table, value)

   Set the ``value`` as current ID to the ``table`` using the ``connection``.

.. method:: Database.currid(connection, table)

   Return the current ID of the ``table`` using the ``connection``.

.. classmethod:: Database.lock(connection, table)

   Lock the ``table`` using the ``connection``.

.. method:: Database.lock_id(id[, timeout])

   Return the SQL expression to lock the ``id``.
   Set ``timeout`` to wait for the lock.

.. method:: Database.has_constraint(constraint)

   Return if the database handle the ``constraint``.

.. method:: Database.has_returning()

   Return if the database supports ``RETURNING`` in ``INSERT`` and ``UPDATE``.

.. method:: Database.has_multirow_insert()

   Return if the database supports ``INSERT`` of multi-rows.

.. method:: Database.has_select_for()

   Return if the database supports ``FOR UPDATE`` and ``FOR SHARE`` in
   ``SELECT``.

.. method:: Database.get_select_for_skip_locked()

   Return For class with skip locked.

.. method:: Database.has_window_functions()

   Return if the database supports window functions.

.. method:: Database.has_unaccent()

   Return if the database suppport unaccentuated function.

.. method:: Database.has_unaccent_indexable()

   Return if the database suppport unaccentuated function in index.

.. method:: Database.unaccent(value)

   Return the SQL expression of unaccentuated ``value``.

.. method:: Database.has_similarity()

   Return if the database suppports similarity function.

.. method:: Database.similarity(column, value)

   Return the SQL expression that compare the similarity of ``column`` and
   ``value``.

.. method:: Database.has_search_full_text()

   Return if the database suppports full text search.

.. method:: Database.format_full_text(\*documents[, language])

   Return the SQL expression that format the ``documents`` into text search
   vectors for the ``language``.

   The order of ``documents`` define the weight for proximity ranking.

.. method:: Database.format_full_text_query(query[, language])

   Convert the ``query`` expression into full text query.

.. method:: Database.search_full_text(document, query)

   Return the SQL expression for searching ``document`` with the ``query``.

.. method:: Database.rank_full_text(document, query[, normalize])

   Return the SQL expression to rank ``document`` with the ``query``.

.. classmethod:: Database.has_sequence()

   Return if the database supports sequence querying and assignation.

.. method:: Database.sequence_exist(connection, name)

   Return if the named sequence exists using the ``connection``.

.. method:: Database.sequence_create(connection, name[, number_increment[, start_value]])

   Create a named sequence incremented by ``number_increment`` or ``1`` and
   starting at ``start_value`` or ``1`` using the ``connection``.

.. method:: Database.sequence_update(connection, name[, number_increment[, start_value]])

   Modify the named sequence with ``number_increment`` and ``start_value``using
   the ``connection``.

.. method:: Database.sequence_rename(connection, old_name, new_name)

   Rename the sequece from ``old_name`` to ``new_name`` using the
   ``connection``.

.. method:: Database.sequence_delete(connection, name)

   Delete the named sequence using the ``connection``.

.. method:: Database.sequence_next_number(connection, name)

   Return the next number fo the named sequence using the ``connection``.

.. method:: Database.has_channel(connection, name)

   Return if the database supports ``LISTEN`` and ``NOTIFY`` on channel.

.. method:: Database.sql_type(type_)

   Return the namedtuple('SQLType', 'base type') corresponding to the SQL
   ``type_``.

.. method:: Database.sql_format(type_, value)

   Return the ``value`` casted for the SQL ``type_``.

.. method:: Database.json_get(column[, key])

   Return the JSON value of the JSON ``key`` from the ``column``.

.. method:: Database.json_key_exists(column, key)

   Return the SQL expression to test if ``key`` exists in the JSON ``column``.

.. method:: Database.json_any_keys_exist(column, keys)

   Return the SQL expression to test if any ``keys`` exist in the JSON
   ``column``.

.. method:: Database.json_all_keys_exist(column, keys)

   Return the SQL expression to test if all ``keys`` exist in the JSON
   ``column``.

.. method:: Database.json_contains(column, json)

   Rteurn the SQL expression to test if the JSON ``column`` contains ``json``.

TableHandler
============

.. class:: TableHandler(model[, history])

   Handle table for the ``model``.
   If ``history`` is set, the table is the one storing the history.

.. attribute:: TableHandler.namedatalen

   The maximing length of named data for the database.

.. attribute:: TableHandler.index_translators

   Contain the :class:`IndexTranslator` for the database.

.. classmethod:: TableHandler.table_exist(table_name)

   Return if the named table exists.

.. classmethod:: TableHandler.table_rename(old_name, new_name)

   Rename the table from ``old_name`` to ``new_name``.

.. method:: TableHandler.column_exist(column_name)

   Return if the named column exists.

.. method:: TableHandler.column_rename(old_name, new_name)

   Rename the column from ``old_name`` to ``new_name``.

.. method:: TableHandler.alter_size(column_name, column_type)

   Modify the size of the named column using the column type.

.. method:: TableHandler.alter_type(column_name, column_type)

   Modify the type of the named column.

.. method:: TableHandler.column_is_type(column_name, type_[, size])

   Return if the column is of type ``type_``.
   If ``type`` is ``VARCHAR``, ``size`` is also compared except if the value if
   negative.

.. method:: TableHandler.db_default(column_name, value)

   Set the default ``value`` on the named column.

.. method:: TableHandler.add_column(column_name, abstract_type[, default[, comment]])

   Add the named column of abstract type.
   The ``default`` is a method that return the value to fill the new column.
   ``comment`` set as comment for the column.

.. method:: TableHandler.add_fk(column_name, reference[, on_delete])

   Add a foreign key constraint on the named column to target the ``reference``
   table name.
   ``on_delete`` defines the method to use when foreign record is deleted.

.. method:: TableHandler.drop_fk(column_name[, table])

   Drop the foreign key constrant on the named column.
   ``table`` can be used to alter another table.

.. method:: TableHandler.not_null_action(column_name[, action])

   Add or remove ``NOT NULL`` on the named column.

.. method:: TableHandler.add_constraint(ident, constraint)

   Add the SQL expression ``constraint`` as constraint named ``ident`` on the
   table.

.. method:: TableHandler.drop_constraint(ident[, table])

   Drop the named ``ident`` constraint.
   ``table`` can be used to alter another table.

.. method:: TableHandler.set_indexes(indexes)

   Create the :class:`indexes <trytond.model.Index>` if possible and drop
   others having ``idx_`` as prefix or ``_index`` as suffix.

.. method:: TableHandler.drop_column(column_name)

   Drop the named column.

.. classmethod:: TableHandler.drop_table(model, table[, cascade])

   Drop the named ``table`` and clean ``ir.model.data`` from the given
   ``model``.
   Set ``cascade`` to drop objects that depend on the table.

.. classmethod:: TableHandler.convert_name(name[, reserved])

   Convert the data name to be lower than namedatalen minus reserved.

.. method:: Database.index_translator_for(index)

   Return the best :class:`IndexTranslator` for the given index.

IndexTranslator
===============

.. class:: IndexTranslator

   Convert an :class:`~trytond.model.Index` into a concrete index.

.. classmethod:: IndexTranslator.definition(index)

   Return the name, SQL query and parameters to create the :class:`index
   <trytond.model.Index>`.

.. classmethod:: IndexTranslator.score(index)

   Return a score related to the fitness of using this translator for the
   :class:`index <trytond.model.Index>`.
   A score of ``0`` means that the translator is unsuited for the requested
   usage.

Exceptions
==========

.. exception:: DatabaseIntegrityError

   Exception raised when the relational integrity of the database is affected.

.. exception:: DatabaseDataError

   Exception raised for errors that are due to problems with the processed data.

.. exception:: DatabaseOperationalError

   Exception raised for errors that are related to the database’s operation.


================================================
FILE: doc/ref/bus.rst
================================================
.. _ref-bus:
.. module:: trytond.bus

Bus
===

The Tryton server listens on ``POST`` requests on the routes matching
``/<database_name>/bus`` and replies with JSON_ dictionary containing:

``channel``
   The channel on which this message has been received.

``message``
   A dictionary that is the message the client must handle.
   The specification of the message depends of its type.

   All messages should at least content a unique identifier in the key
   ``message_id`` and their type in the key of the same name.

Client sending their requests on the route must be authenticated.
The request must submit a JSON_ dictionary containing:

``last_message``
   A value identifying the last message received by the client.
   This value can be ``null``.

``channels``
   A list of strings denoting the channels the client is listening to.

.. _JSON: https://en.wikipedia.org/wiki/JSON

.. class:: Bus

   Expose two methods that are used by the framework:
   ``publish`` and ``subscribe``.

.. classmethod:: Bus.publish(channel, message)

   Send a message to a specific channel.

   Implemented messages are:

      * :ref:`Notifications <bus_notification_spec>`

.. classmethod:: Bus.subscribe(database, channels[, last_message])

   Subscribe a user client to some ``channels`` of messages.

   The ``message_id`` parameter defines the last message id received by the
   client.
   It defaults to ``None`` when not provided.

The default implementation provides an helper method to construct the response:

.. classmethod:: Bus.create_response(channel, message)

   Create a dictionary suitable as a response from a message and a timestamp.

   ``channel`` is the channel on which the message has been received.

   ``message`` is the content of the message sent to the client.

.. note::

   The implementation relies on the fact that the order of the messages
   received is consistent across different trytond instances allowing to
   dispatch the request to any trytond server running.

Notification
------------

Tryton provides a shortcut to send a notification with the ``notify`` function.

.. function:: notify(title[, body[, priority[, user[, client]]]])

   Send a text message to a user's client to be displayed using a notification
   popup. The meaning of ``title``, ``body`` and ``priority`` is defined in
   :ref:`bus_notification_spec`.

   If ``user`` is not set, the current
   :attr:`~trytond.transaction.Transaction.user` is used.
   Otherwise ``user`` is the user id to notify.

   If ``client`` is not set then every client of the user receives the message.
   If ``client`` and ``user`` are not set, the system send the notification to
   the current user client.
   Otherwise the notification is sent to the client whose id matches
   ``client``.

.. _bus_notification_spec:

Notification message
~~~~~~~~~~~~~~~~~~~~

Notification messages are composed of four parts:

``kind``
   The string ``notification``.

``title``
   A string containing a one-line summary of the message.

``body``
   A string containing a short informative message for the user.
   It can span multiple lines but no markup is allowed.

``priority``
   An integer between 0 (low priority) to 3 (urgent).
   The notification priority on the platform supporting it.


================================================
FILE: doc/ref/cache.rst
================================================
.. _ref-cache:
.. module:: trytond.cache

Cache
=====

.. class:: Cache(name[, size_limit[, duration[, context]]])

   Use to cache values between server requests.

   The ``name`` should be unique and it's used to identify the cache.
   Usually ``<class_name>.<content_name>`` is used to make it unique.

   The ``size_limit`` parameter can be used to limit the number of values
   cached and it has ``1024`` as the default value.

   The ``duration`` parameter defines how long a cached value stays valid but
   if it is not set the value remains valid until it is cleared.

   And the ``context`` parameter is used to indicate if the cache depends on
   the user context and is ``True`` by default.

   The cache is cleaned on :class:`~trytond.transaction.Transaction` starts and
   resets on :class:`~trytond.transaction.Transaction` commit or rollback.

   .. warning::

       As there is no deepcopy of the values cached, they must never be mutated
       after being set in or retrieved from the cache.

.. attribute:: Cache.hit

   Count the number of times the cache returned a cached value.

.. attribute:: Cache.miss

   Count the number of times the cache did not contain the key.

.. classmethod:: Cache.stats()

   Yield statistics for each instance.

.. method:: Cache.get(key[, default])

   Retrieve the value of the key in the cache.

   If a ``default`` is specified it is returned when the key is missing
   otherwise it returns ``None``.

.. method:: Cache.set(key, value)

   Set the ``value`` of the ``key`` in the cache.

.. method:: Cache.clear()

   Clear all the keys in the cache.

.. classmethod:: Cache.clear_all()

   Clear all cache instances.

.. classmethod:: Cache.sync(transaction)

   Synchronize caches between servers using :class:`transaction
   <trytond.transaction.Transaction>` instance.

.. method:: Cache.sync_since(value)

   Return ``True`` if the last synchronization was done before ``value``.

.. classmethod:: Cache.commit(transaction)

   Apply cache changes from transaction.

.. classmethod:: Cache.rollback(transaction)

   Remove cache changes from transaction.

.. classmethod:: Cache.drop(dbname)

   Drop all caches for named database.

.. note::

    By default Tryton uses a MemoryCache, but this behaviour can be overridden
    by setting a fully qualified name of an alternative class defined in the
    :ref:`configuration <topics-configuration>` ``class`` of the ``cache``
    section.


================================================
FILE: doc/ref/exceptions.rst
================================================
.. _ref-exceptions:
.. module:: trytond.exceptions

Exceptions
==========

.. exception:: TrytonException

   The base class for all Tryton exceptions.

.. exception:: UserError(message[, description[, domain]])

   The base class for exceptions used to display an error message to users.
   The domain may be a 2-tuple containing a :ref:`domain <topics-domain>` and a
   dictionary of field definitions used to format the domain and append to the
   description.

.. exception:: UserWarning(name, message[, description])

   The base class for exceptions used to display a warning message to users.

.. exception:: LoginExceptions(name, message[, type])

   The exception used to request ``name`` parameter for the login process.

.. exception:: ConcurrencyException(message)

   The exception raised on concurrent modification.

.. exception:: RateLimitException

   The exception raised when user has sent too many login requests.

.. exception:: MissingDependenciesException(missings)

   The exception raised when modules are missing.


.. module:: trytond.model.exceptions

.. exception:: AccessError

   The exception raised when trying to access a record without the rights.

.. exception:: AccessButtonError

   The exception raised when trying to execute a button without the rights.

.. exception:: ImportDataError

   The exception raises when importing data fails.

.. exception:: ValidationError

   The base class for all record validation error.

.. exception:: DomainValidationError

   The exception raised when the domain of a field is not valid.

.. exception:: RequiredValidationError

   The exception raised when a required field is empty.

.. exception:: SizeValidationError

   The exception raised when the size of a field is too big.

.. exception:: DigitsValidationError

   The exception raised when the value of a field does not respect its digits.

.. exception:: SelectionValidationError

   The exception raised when the value is not in the selection.

.. exception:: TimeFormatValidationError

   The exception raised when the time format of a field is not respected.

.. exception:: ForeignKeyError

   The exception raised when a foreign key is not respected.

.. exception:: SQLConstraintError

   The exception raised when a :attr:`~trytond.model.ModelSQL._sql_constraints`
   is not respected.

.. exception:: RecursionError

   The exception raised by :class:`~trytond.model.TreeMixin.check_recursion`.


================================================
FILE: doc/ref/fields.rst
================================================
.. _ref-models-fields:
.. module:: trytond.model.fields

======
Fields
======

.. contents::
   :local:
   :backlinks: entry
   :depth: 2

Field
=====

.. class:: Field

Fields define the behavior of the data on model's record.

The following attributes are available to all field types.
All are optional except :attr:`~Field.string`.

.. attribute:: Field.string

   A string for the label of the field.

.. attribute:: Field.help

   A multi-line help string for the field.

.. attribute:: Field.required

   If ``True``, the field is not allowed to be empty.
   Default is ``False``.

.. attribute:: Field.readonly

   If ``True``, the field is not editable in the client.
   Default is ``False``.

   .. warning::
      For relational fields, it means only the new, delete, add and remove
      buttons are inactivated.
      The editable state of the target record must be managed at the target
      model level.

.. attribute:: Field.domain

   A :ref:`domain <topics-domain>` constraint that is applied on the field
   value.

   .. note::

      For :class:`Reference` field it is a dictionary that contains the domain
      per model name.

.. attribute:: Field.states

   A dictionary that defines dynamic states of the field and overrides the
   static one.

   Possible keys are ``required``, ``readonly`` and ``invisible``.
   The values are :class:`~trytond.pyson.PYSON` statements that is evaluated
   with the values of the record.

.. attribute:: Field.on_change

   A set of field names.

   If this attribute is set, the client calls the method ``on_change_<field
   name>`` of the model when the user changes the current field value and will
   give the values of each fields in this list.

   The method signature is::

      on_change_<field name>()

   This method must change the value of the fields to be updated.

   .. note::

      The on_change_<field name> methods are running in a readonly transaction.

   The set of field names is filled by using the decorator :meth:`depends`.

.. attribute:: Field.on_change_with

   A set of field names.

   Same as :attr:`on_change`, but defined the other way around.
   If this attribute is set, the client will call the method
   ``on_change_with_<field name>`` of the model when the user changes one of
   the fields defined in the list and will give the values of each fields in
   this list.

   The method signature is::

      on_change_with_<field name>()

   This method must return the new value of the field.

   .. note::

      The on_change_with_<field name> methods are running in a readonly
      transaction.

   The set of field names is filled by using the decorator :meth:`depends`.

.. attribute:: Field.depends

   A :py:class:`set` of extra field names on which the field depends.

   This means that the client read also these fields even if they are not
   defined on the view.
   :attr:`Field.depends` is used for example to ensure that
   :class:`~trytond.pyson.PYSON` statement could be evaluated.

.. attribute:: Field.display_depends

   A computed set of field names on which the field depends when being
   displayed in a read only view.

.. attribute:: Field.edition_depends

   A computed set of field names on which the field depends when being
   displayed in a writable view.

.. attribute:: Field.validation_depends

   A computed set of field names on which the field depends when being
   validated.

.. attribute:: Field.context

   A dictionary which updates the current context for *relation field*.

   .. warning::

      The context could only depend on direct field of the record and without
      context.

.. attribute:: Field.loading

   Define how the field must be loaded: ``lazy`` or ``eager``.

.. attribute:: Field.name

   The name of the field.

Instance methods:

.. method:: Field.convert_domain(domain, tables, Model)

    Convert the simple :ref:`domain <topics-domain>` clause into a SQL
    expression or a new domain.
    :ref:`tables <ref-tables>` could be updated to add new joins.

.. method:: Field.sql_format(value)

    Convert the value to use as parameter of SQL queries.

.. method:: Field.sql_type()

    Return the namedtuple('SQLType', 'base type') which defines the SQL type to
    use for definition and casting.
    Or ``None`` if the field is not stored in the database.

    sql_type is using the ``_sql_type`` attribute to compute its return value.
    The backend is responsible for the computation.

    For the list of supported types by Tryton see :ref:`backend types
    <topics-backend_types>`.

.. method:: Field.sql_cast(expression)

    Return the SQL expression with cast with the type of the field.

.. method:: Field.sql_column(table)

    Return the Column instance based on table.

.. method:: Field.set_rpc(model)

    Add to :class:`model <trytond.model.Model>` the default
    :class:`~trytond.rpc.RPC` instances needed by the field.

.. method:: Field.definition(model, language)

    Return a dictionary with the definition of the field.

.. method:: Field.definition_translations(model, language)

    Return a list of translation sources used by :meth:`~Field.definition`.

Default value
=============

See :ref:`default value <topics-fields_default_value>`

Searching
=========

A class method could be defined for each field which must return a SQL
expression for the given domain instead of the default one.
The method signature is::

    domain_<field name>(domain, tables)

Where ``domain`` is the simple :ref:`domain <topics-domain>` clause and
``tables`` is a nested dictionary, see :ref:`tables <ref-tables>`.

Ordering
========

A class method could be defined for each field which must return a list of SQL
expression on which to order instead of the field.
The method signature is::

    order_<field name>(tables)

Where ``tables`` is a nested dictionary, see :ref:`tables <ref-tables>`.

Depends
=======

.. method:: depends([\*fields[, methods]])

   A decorator to define the field names on which the decorated method depends.

   The ``methods`` argument can be used to duplicate the field names from other
   decorated methods.
   This is useful if the decorated method calls another method.

.. _ref-models-fields-types:

Field types
===========

Boolean
-------

.. class:: Boolean(string[, \**options])

   A :py:class:`boolean <bool>` field.

Integer
-------

.. class:: Integer(string[, \**options])

   An :py:class:`integer <int>` field.

BigInteger
----------

.. class:: BigInteger(string[, \**options])

   A long :py:class:`integer <int>` field.

Char
----

.. class:: Char(string[, size[, translate[, strip[, \**options]]]])

   A single line :py:class:`string <str>` field.

   Search by similarity is used for the ``ilike`` operator and
   :meth:`~trytond.tools.is_full_text` value if the backend supports it and a
   threshold is set.
   The similarity threshold is defined for the context key ``<model
   name>.<field name>.search_similarity`` or ``search_similarity``.

   The field is ordered using the similarity with the context value from the
   key ``<model name>.<field name>.order`` if it is set.

:class:`Char` has some extra arguments:

.. attribute:: Char.size

   The maximum length (in characters) of the field. The size is enforced at the
   storage level and in the client input.
   The value can be a :class:`~trytond.pyson.PYSON` statement.

.. attribute:: Char.translate

   If ``True``, the value of the field is translatable.
   The value readed and stored will depend on the ``language`` defined in the
   context.

.. attribute:: Char.strip

   If ``True``, leading and trailing whitespace are removed.
   If ``leading``, leading whitespace are removed.
   If ``trailing``, trailing whitespace are removed.
   The default value is ``True``.

.. attribute:: Char.autocomplete

   A set of field names.

   If this attribute is set, the client calls the method ``autocomplete_<field
   name>`` of the :class:`model <trytond.model.Model>` when the user changes
   one of those field values.
   The method signature is::

      autocomplete_<field name>()

   This method must return a list of string that is used by the client to make
   autocompletion proposal.
   The set of field names could be filled by using the decorator :meth:`depends`.

.. attribute:: Char.search_unaccented

   If this attribute is set to ``True``, ``ilike`` searches is performed on
   unaccented strings.
   The default value is ``True``.

   .. warning::

      The database backend must supports unaccented search.

.. attribute:: Char.search_full_text

   If this attribute is set to ``True``, ``ilike`` searches with an
   :meth:`~trytond.tools.is_full_text` value use the full text search of the
   backend.
   The default value is ``False``.

   The context can be used to force the full text search behaviour.
   This is done using the key ``<model name>.<field name>.search_full_text``.
   If ``True``, the full text search is used no matter what the value.
   If ``False``, no full text search is peformed.

   The full text ranking value is added to the similarity if the
   ``search_full_text`` is ``True``.

   .. note::

      The database backend must support full text search otherwise ``ilike`` is
      always used.

Text
----

.. class:: Text(string[, size[, translatable[, \**options]]])

   A multi line :py:class:`string <str>` field.

:class:`Text` has some extra arguments:

.. attribute:: Text.size

   Same as :attr:`Char.size`.

.. attribute:: Text.translate

   Same as :attr:`Char.translate`.

.. attribute:: Text.search_unaccented

   Same as :attr:`Char.search_unaccented`.

.. attribute:: Text.search_full_text

   Same as :attr:`Char.search_full_text`.
   The default value is ``True``.

FullText
--------

.. class:: FullText(\**options)

   An internal field to store a list of parsed strings ordered by weights.
   The field is ordered using the full text ranking with the context value from
   the key ``<model name>.<field name>.order`` if it is set.


Float
-----

.. class:: Float(string[, digits[, \**options]])

   A :py:class:`floating-point number <float>` field.
   It is represented in Python by a ``float`` instance.

:class:`Float` has some extra arguments:

.. attribute:: Float.digits

   A tuple of two :py:class:`integers <int>`.

   The first integer defines the total of numbers in the integer part.

   The second integer defines the total of numbers in the decimal part.

   Integers can be replaced by a :class:`~trytond.pyson.PYSON` statement.
   If digits is ``None`` or any values of the tuple is ``None``, no validation
   on the numbers is done.
   The tuple can be replaced by a string containing the name of a
   :class:`Many2One` pointing to a :class:`~trytond.model.DigitsMixin`.

Numeric
-------

.. class:: Numeric(string[, digits[, \**options]])

   A :py:class:`fixed-point number <decimal.Decimal>` field.

:class:`Numeric` has some extra arguments:

.. attribute:: Numeric.digits

   Same as :attr:`Float.digits`.

Date
----

.. class:: Date(string[, \**options])

   A :py:class:`date <datetime.date>` field.

Instance methods:

.. method:: Date.sql_cast(expression[, timezone])

   Return the SQL expression cast as date.

   If timezone is set the expression is first converted to this timezone.

DateTime
--------

.. class:: DateTime(string[, format, \**options])

   A :py:class:`date and time <datetime.datetime>` field.

   It is stored in `UTC`_ while displayed in the user timezone.

.. _`UTC`: https://en.wikipedia.org/wiki/Coordinated_Universal_Time

:class:`DateTime` has some extra arguments:

.. attribute:: DateTime.format

   A string format as used by :py:meth:`~datetime.datetime.strftime`.

   This format is used to display the time part of the field.
   The default value is ``%H:%M:%S``.
   The value can be replaced by a :class:`~trytond.pyson.PYSON` statement.

Timestamp
---------

.. class:: Timestamp(string[, \**options])

   A :py:class:`timestamp <datetime.datetime>` field.

Time
----

.. class:: Time(string[, format, \**options])

   A :py:class:`time <datetime.time>` field.

:class:`Time` has some extra arguments:

.. attribute:: Time.format

    Same as :attr:`DateTime.format`.

TimeDelta
---------

.. class:: TimeDelta(string[, converter[, \**options]])

   An :py:class:`interval <datetime.timedelta>` field.

:class:`TimeDelta` has some extra arguments:

.. attribute:: TimeDelta.converter

   The name of the context key containing the time converter.

   A time converter is a dictionary with the keys:
   ``s`` (second), ``m`` (minute), ``h`` (hour), ``d`` (day), ``w`` (week),
   ``M`` (month), ``Y`` (year) and the value in second.

Binary
------

.. class:: Binary(string[, \**options])

   A :py:class:`binary <bytes>` field.

   .. warning::

      If the context contains a key composed of the model name and field name
      separated by a dot and its value is the string ``size`` then the read
      value is the size instead of the content.

:class:`Binary` has some extra arguments:

.. attribute:: Binary.filename

   Name of the field that holds the data's filename.

   Default value is an empty string, which means the data has no filename (in
   this case, the filename is hidden, and the "Open" button is hidden when the
   widget is set to "image").

.. attribute:: Binary.file_id

   Name of the field that holds the ``FileStore`` identifier.

   Default value is ``None`` which means the data is stored in the database.
   The field must be on the same table and accept ``char`` values.

   .. warning::

      Switching from database to file-store is supported transparently.
      But switching from file-store to database is not supported without
      manually upload to the database all the files.

.. attribute:: Binary.store_prefix

   The prefix to use with the ``FileStore``.

   Default value is ``None`` which means the database name is used.

Selection
---------

.. class:: Selection(selection, string[, sort[, selection_change_with[, translate[, help_selection[, \**options]]]]])

   A :py:class:`string <str>` field with limited values to choose from.

:class:`Selection` has some extra arguments:

.. attribute:: Selection.selection

   A list of 2-tuples that looks like this::

      [('M', 'Male'), ('F', 'Female')]

   The first element in each tuple is the actual value stored.
   The second element is the human-readable name.

   It can also be the name of a class or instance method on the model, that
   returns an appropriate list.
   The signature of the method is::

      selection()

   .. note::
      The method is automaticly added to :attr:`trytond.model.Model.__rpc__` if
      not manually set.

.. attribute:: Selection.sort

   If ``True``, the choices is sorted by human-readable value.

   Default value is ``True``.

   .. note::
      If it is ``False``, search results ordered by the field uses the index of
      the selection instead of the human-readable name.

.. attribute:: Selection.selection_change_with

   A set of field names.

   If this attribute is set, the client calls the ``selection`` method of
   the model when the user changes on of the fields defined in the list and
   gives the values of each fields in the list.

   The ``selection`` method should be an instance method.

   The set of field names is filled by using the decorator :meth:`depends`.

.. attribute:: Selection.translate_selection

   If ``True``, the human-readable values will be translated.

   Default value is ``True``.

.. attribute:: Selection.help_selection

   A dictionary mapping the selection value with its help string.

Instance methods:

.. method:: Selection.translated([name])

   Returns a descriptor for the translated value of the field.

   The descriptor must be used on the same class as the field.
   It uses the language defined in the context of the instance accessed.


MultiSelection
--------------

.. class:: MultiSelection(selection, string[, sort[, translate[, help_selection[, \**options]]]])

   A :py:class:`tuple` field with limited values to choose from.

:class:`MultiSelection` has some extra arguments:

.. attribute:: MultiSelection.selection

   Same as :attr:`Selection.selection`.

.. attribute:: MultiSelection.sort

   Same as :attr:`Selection.sort`.

.. attribute:: MultiSelection.translate_selection

   Same as :attr:`Selection.translate_selection`.

.. attribute:: MultiSelection.help_selection

   Same as :attr:`Selection.help_selection`.

Instance methods:

.. method:: MultiSelection.translated([name])

   Same as :meth:`Selection.translated` but returns a list of translated
   values.


Reference
---------

.. class:: Reference(string[, selection[, sort[, selection_change_with[, translate[, help_selection[,search_order[, search_context[, \**options]]]]]]]])

   A :py:class:`string <str>` field that refers to a record of a model.

      '<model name>,<record id>'

   But a ``tuple`` can be used to search or set value.

:class:`Reference` has some extra arguments:

.. attribute:: Reference.selection

   Same as :attr:`Selection.selection` but only for model name.

.. attribute:: Reference.sort

   Same as :attr:`Selection.sort`.

.. attribute:: Reference.selection_change_with

   Same as :attr:`Selection.selection_change_with`.

.. attribute:: Reference.translate_selection

   Same as :attr:`Selection.translate_selection`.

.. attribute:: Reference.help_selection

   Same as :attr:`Selection.help_selection`.

.. attribute:: Reference.datetime_field

   Same as :attr:`Many2One.datetime_field`.

.. attribute:: Reference.search_order

   A dictionary that contains a :ref:`PYSON <ref-pyson>` expression defining
   the default order used to display search results in the clients per model
   name.

.. attribute:: Reference.search_context

   Same as :attr:`Many2One.search_context`.

Instance methods:

.. method:: Reference.translated([name])

   Same as :meth:`~Selection.translated` but for the translated name of the
   target model.

.. method:: Reference.sql_id(column, Model)

   Return the SQL expression that extract the record ID of the column.


Many2One
--------

.. class:: Many2One(model_name, string[, left[, right[, path[, ondelete[, datetime_field[, target_search[, search_order[, search_context[, \**options]]]]]]]]])

   A many-to-one relation field that refers to a record of the named model.

   A :py:class:`integer <int>` as :attr:`~trytond.model.Model.id` is used for
   low level APIs.

:class:`Many2One` has some extra arguments:

.. attribute:: Many2One.model_name

   The name of the target model.

.. attribute:: Many2One.left

   The name of the field that stores the left value for the `Modified Preorder
   Tree Traversal`_.
   It only works if the :attr:`model_name` is the same then the model.

   .. warning::

      The MPTT Tree will be rebuild on database update if one record is found
      having left or right field value equals to the default or NULL.

.. _`Modified Preorder Tree Traversal`: http://en.wikipedia.org/wiki/Tree_traversal

.. attribute:: Many2One.right

   The name of the field that stores the right value.
   See :attr:`left`.

.. attribute:: Many2One.path

   The name of the :class:`Char` field that stores the path.
   It only works if the :attr:`model_name` is the same as the model.

   .. note::

      The path is used to optimize searches using the ``child_of`` or
      ``parent_of`` operators.

   .. warning::

      The paths in the tree will be rebuilt during the database update if any
      of the records are found to have a path field equal to the default, or
      ``NULL``.

.. attribute:: Many2One.ondelete

   Define the behavior of the record when the target record is deleted.

   Allowed values are:

      - ``CASCADE``: tries to delete the record.

      - ``RESTRICT``: prevents the deletion of the target record.

      - ``SET NULL``: clears the relation field.

    ``SET NULL`` is the default setting.

   .. note::

      ``SET NULL`` is override into ``RESTRICT`` if :attr:`~Field.required` is
      ``True``.

.. attribute:: Many2One.datetime_field

   If set, the target record will be read at the date defined by the datetime
   field name of the record.

   It is usually used in combination with
   :attr:`~trytond.model.ModelSQL._history` to request a value for a given date
   and time on a historicized model.

.. attribute:: Many2One.target_search

   Define the kind of SQL query to use when searching on related target.

   Allowed values are:

      - ``subquery``: uses a subquery based on the ids.

      - ``join``: adds a join on the main query.

   ``join`` is the default value.

   .. note::

      ``join`` could improve the performance if the target has a huge amount of
      records.

.. attribute:: Many2One.search_order

   A :ref:`PYSON <ref-pyson>` expression defining the default order used to
   display search results in the clients.

.. attribute:: Many2One.search_context

   A dictionary defining the default context used when searching from the
   client.

   .. note::

      ``search_context`` overrides the values from the client ``context``.


One2Many
--------

.. class:: One2Many(model_name, field, string[, add_remove[, order[, datetime_field[, size[, search_order[, search_context[, \**options]]]]]]])

   A one-to-many relation field that refers to records of the named model.

   It requires to have the opposite :class:`Many2One` field or a
   :class:`Reference` field defined on the target model.

   A :py:class:`tuple <tuple>` composed of :py:class:`integer <int>` as
   :attr:`~trytond.model.Model.id` is used for low level APIs.

:class:`One2Many` accepts as written and created value a :py:class:`list
<list>` of :py:class:`tuples <tuple>` like this:

   - ``('create', [{<field name>: value, ...}, ...])``:
     create new target records and link them to this one.

   - ``('write', ids, {<field name>: value, ...}, ...)``:
     write values to target ids.

   - ``('delete', ids)``:
     delete the target ids.

   - ``('add', ids)``:
     link the target ids to this record.

   - ``('remove', ids)``:
     unlink the target ids from this record.

   - ``('copy', ids[, {<field name>: value, ...}, ...])``:
     copy the target ids to this record.
     Optional field names and values may be added to override some of the
     fields of the copied records.

.. note::

   :class:`~trytond.pyson.PYSON` statement or :attr:`Field.depends` of target
   records can access value of the parent record fields by prepending
   ``_parent_`` to the opposite field name and followed by the dotted notation.

:class:`One2Many` has some extra arguments:

.. attribute:: One2Many.model_name

   The name of the target model.

.. attribute:: One2Many.field

   The name of the field that handles the opposite :class:`Many2One` or
   :class:`Reference`.

:class:`One2Many` has some extra arguments:

.. attribute:: One2Many.add_remove

   A :ref:`domain <topics-domain>` to select records to add.

   If set, the client will allow to add/remove existing records instead of only
   create/delete.

.. attribute:: One2Many.filter

   A :ref:`domain <topics-domain>` that is not a constraint but only a filter
   on the records.

   .. warning::

      Only a static domain is allowed, it cannot contain any
      :class:`~trytond.pyson.PYSON` statements.

.. attribute:: One2Many.order

   A list of tuple defining the default order of the records like for
   :attr:`trytond.model.ModelSQL._order`.

.. attribute:: One2Many.datetime_field

   Same as :attr:`Many2One.datetime_field`.

.. attribute:: One2Many.size

   An integer or a PYSON expression denoting the maximum number of records
   allowed in the relation.

.. attribute:: One2Many.search_order

   Same as :attr:`Many2One.search_order`.

.. attribute:: One2Many.search_context

   Same as :attr:`Many2One.search_context`.

Instance methods:

.. method:: One2Many.remove(instance, records)

   Remove the target records from the instance instead of deleting them.

Many2Many
---------

.. class:: Many2Many(relation_name, origin, target, string[, order[, datetime_field[, size[, search_order[, search_context[, \**options]]]]]])

   A many-to-many relation field that refers to records of the targeted model.

   It requires to have the opposite origin :class:`Many2One` field or a
   :class:`Reference` field defined on the relation model and a
   :class:`Many2One` field pointing to the target.

   A :py:class:`tuple <tuple>` composed of :py:class:`integer <int>` as
   :attr:`~trytond.model.Model.id` is used for low level APIs.

:class:`Many2Many` accepts as written and created value a :py:class:`list
<list>` of :py:class:`tuples <tuple>` like the :class:`One2Many`.

:class:`Many2Many` has some extra arguments:

.. attribute:: Many2Many.relation_name

   The name of the relation model.

.. attribute:: Many2Many.origin

   The name of the field that has the :class:`Many2One` or :class:`Reference`
   to the record.

.. attribute:: Many2Many.target

   The name of the field that has the :class:`Many2One` to the target record.

   .. note::

      A :class:`Many2Many` field can be used on a simple
      :class:`~trytond.model.ModelView`, like in a
      :class:`~trytond.wizard.Wizard`.
      For this, :attr:`~Many2Many.relation_name` is set to the target model and
      :attr:`~Many2Many.origin` and :attr:`~Many2Many.target` are set to
      ``None``.

:class:`Many2Many` has some extra arguments:

.. attribute:: Many2Many.order

   Same as :attr:`One2Many.order`.

.. attribute:: Many2Many.datetime_field

   Same as :attr:`Many2One.datetime_field`.

.. attribute:: Many2Many.size

   An integer or a :class:`~trytond.pyson.PYSON` expression denoting the
   maximum number of records allowed in the relation.

.. attribute:: Many2Many.add_remove

   An alias to the :attr:`~Field.domain` for compatibility with the
   :class:`One2Many`.

.. attribute:: Many2Many.filter

   Same as :attr:`One2Many.filter`.

.. attribute:: Many2Many.search_order

   Same as :attr:`Many2One.search_order`.

.. attribute:: Many2Many.search_context

   Same as :attr:`Many2One.search_context`.

Instance methods:

.. method:: Many2Many.get_relation()

   Return the relation :class:`~trytond.model.Model`.

.. method:: Many2Many.get_target()

   Return the target :class:`~trytond.model.Model`.

.. method:: Many2Many.delete(instance, records):

   Delete the target records from the instance instead of removing them.


One2One
-------

.. class:: One2One(relation_name, origin, target, string[, datetime_field[, \**options]])

   A one-to-one relation field that refers to a record of the targeted model.

   .. warning::
      It is on the relation_name :class:`~trytond.model.Model` that the unicity
      of the couple (origin, target) must be checked.

   A :py:class:`integer <int>` as :attr:`~trytond.model.Model.id` is used for
   low level APIs.

:class:`One2One` has some extra arguments:

.. attribute:: One2One.datetime_field

   Same as :attr:`Many2One.datetime_field`.

.. attribute:: One2One.filter

   Same as :attr:`One2Many.filter`.

Instance methods:

.. method:: One2One.get_relation()

   Return the relation :class:`~trytond.model.Model`.

.. method:: One2One.get_target()

   Return the target :class:`~trytond.model.Model`.


Function
--------

.. class:: Function(field, getter[, setter[, searcher[, getter_with_context]]])

   A function field can emulate any other given :class:`field <Field>`.

:class:`Function` has some extra arguments:

.. attribute:: Function.getter

   The name of the classmethod or instance of the :class:`~trytond.model.Model`
   for getting values.
   The signature of the classmethod is::

      getter(instances, name)

   where ``name`` is the name of the field, and it must return a dictionary
   with a value for each instance.

   Or the signature of the classmethod is::

      getter(instances, names)

   where ``names`` is a list of name fields, and it must return a dictionary
   containing for each names a dictionary with a value for each instance.

   The signature of the instancemethod is::

      getter(name)

   where ``name`` is the name of the field, and it must return the value.

.. attribute:: Function.setter

   The name of the classmethod of the :class:`~trytond.model.Model` to set the
   value.
   The signature of the method id::

      setter(instances, name, value)

   where ``name`` is the name of the field and ``value`` the value to set.

   .. warning::

       The modifications made to instances are not saved automatically.

.. attribute:: Function.searcher

   The name of the classmethod of the :class:`~trytond.model.Model` to search
   on the field.
   The signature of the method is::

      searcher(name, clause)

   where ``name`` is the name of the field and ``clause`` is a :ref:`domain
   clause <topics-domain>`.
   It must return a list of :ref:`domain <topics-domain>` clauses but the
   ``operand`` can be a SQL query.

.. attribute:: Function.getter_with_context

   A boolean telling if the getter result depends on the context.

   If it does not depend, the getter is called without context and the result
   is stored in the transaction cache when readonly.

   The default value is ``True``.

Instance methods:

.. method:: Function.get(ids, model, name[, values])

   Call the :attr:`~Function.getter` classmethod where ``model`` is the
   :class:`~trytond.model.Model` instance of the field, ``name`` is the name of
   the field.

.. method:: Function.set(ids, model, name, value)

   Call the :attr:`~Function.setter` classmethod where ``model`` is the
   :class:`~trytond.model.Model` instance of the field, ``name`` is the name of
   the field, ``value`` is the value to set.

.. method:: Function.search(model, name, clause)

   Call the :attr:`~Function.searcher` classmethod where ``model`` is the
   :class:`~trytond.model.Model` instance of the field, ``name`` is the name of
   the field, ``clause`` is a clause of :ref:`domain <topics-domain>`.

MultiValue
----------

.. class:: MultiValue(field)

   A multivalue field that is like a :class:`Function` field but with
   predefined :attr:`~Function.getter` and :attr:`~Function.setter` that use
   the :class:`~trytond.model.MultiValueMixin` for stored values.

.. warning::

   The :meth:`~trytond.model.MultiValueMixin.get_multivalue` and
   :meth:`~trytond.model.MultiValueMixin.set_multivalue` should be prefered
   over the descriptors of the field.

.. warning::

   The :ref:`default <topics-fields_default_value>` method of the field must
   accept pattern as keyword argument.


Dict
----

.. class:: Dict(schema_model[, \**options])

   A :py:class:`dictionary <dict>` field with predefined keys.

.. note::
    It is possible to store the dict as JSON in the database if the backend
    supports by manually altering the column type to JSON on the database.

:class:`Dict` has some extra arguments:

.. attribute:: Dict.schema_model

   The name of the :class:`~trytond.model.DictSchemaMixin` model that stores
   the definition of keys.

.. attribute:: Dict.search_unaccented

   Same as :attr:`Char.search_unaccented` but when searching on key's value.

Instance methods:

.. method:: Dict.translated([name[, type_]])

   Return a descriptor for the translated ``values`` or ``keys`` of the field
   following ``type_``.
   The descriptor must be used on the same class as the field.
   Default ``type_`` is ``values``.


================================================
FILE: doc/ref/filestore.rst
================================================
.. _ref-filestore:
.. module:: trytond.filestore

FileStore
=========

.. class:: FileStore()

   Store and retrieve files from the directory defined in the configuration
   ``path`` of ``database`` section.

   It uses a two levels of directory composed of the 2 chars of the file hash.
   It is an append only storage.

.. method:: FileStore.get(id[, prefix])

   Retrieve the content of the file referred by the id in the prefixed
   directory.

.. method:: FileStore.getmany(ids[, prefix])

   Retrieve a list of contents for the sequence of ids.

.. method:: FileStore.size(id[, prefix])

   Return the size of the file referred by the id in the prefixed directory.

.. method:: FileStore.sizemany(ids[, prefix])

   Return a list of sizes for the sequence of ids.

.. method:: FileStore.set(data[, prefix])

   Store the data in the prefixed directory and return the identifiers.

.. method:: FileStore.setmany(data[, prefix])

   Store the sequence of data and return a list of identifiers.

.. note::
   The class can be overridden by setting a fully qualified name of a
   alternative class defined in the configuration ``class`` of the ``database``
   section.


================================================
FILE: doc/ref/i18n.rst
================================================
.. _ref-i18n:
.. module:: trytond.i18n

Internationalization
====================

.. function:: gettext(message_id, [language[, \**variables]])

   Return the message translated into the ``language``.

   The ``message_id`` is the ``XML`` id for the ``ir.message`` that is to be
   translated, and the ``variables`` keyword arguments are used as a mapping to
   format the string.
   If ``language`` is not set, then the :attr:`Transaction.language
   <trytond.transaction.Transaction.language>` is used.

.. function:: lazy_gettext(message_id, [language[, \**variables]])

   Return a LazyString that will be translated with gettext later when actually
   used.


================================================
FILE: doc/ref/index.rst
================================================
.. _ref-index:

=============
API Reference
=============

Reference of the ``trytond`` API:

.. toctree::
   :maxdepth: 1

   models
   fields
   wizard
   pyson
   transaction
   exceptions
   backend
   tools/index
   pool
   rpc
   i18n
   sendmail
   filestore
   cache
   bus
   tests


================================================
FILE: doc/ref/models.rst
================================================
.. _ref-models:
.. module:: trytond.model

======
Models
======

.. contents::
   :local:
   :backlinks: entry
   :depth: 2

Model
=====

.. class:: Model([id[, \**kwargs]])

The base class that every kind of :ref:`model <topics-models>` inherits.

Class attributes are:

.. attribute:: Model.__name__

   The a unique name to reference the model throughout the platform.

.. attribute:: Model.__access__

   A set that contains the names of relation field for which the access rights
   are also checked for this model.

.. attribute:: Model.__rpc__

   A dictionary with method name as key and an instance of
   :class:`~trytond.rpc.RPC` as value.

.. attribute:: Model._rec_name

   The name of the field used as name of records.
   The default value is ``name``.

.. attribute:: Model.id

   The definition of the :class:`~trytond.model.fields.Integer` field ``id`` of
   records.

.. attribute:: Model.__queue__

   Return a queue caller for the model.
   The called method will be pushed into the queue.

.. attribute:: Model._fields

   A dictionary with the field name as key and its
   :class:`~fields.Field` instance as value.

.. attribute:: Model._record

   The record class to store internaly the values of the instances.

.. attribute:: Model._defaults

   A dictionary with the field name as key and its default method as value.

Class methods:

.. classmethod:: Model.__setup__()

   Setup the class before adding into the :class:`~trytond.pool.Pool`.
   See :meth:`trytond.pool.PoolBase.__setup__`.

.. classmethod:: Model.__post_setup__()

   Setup the class after added into the :class:`~trytond.pool.Pool`.
   See :meth:`trytond.pool.PoolBase.__post_setup__`.

.. classmethod:: Model.__register__(module_name)

   Register the model in ``ir.model`` and ``ir.model.field``.
   See :meth:`trytond.pool.PoolBase.__register__`.

.. classmethod:: Model.default_get(fields_names[, with_rec_name])

   Return a dictionary with the default values for each field in
   ``fields_names``.
   Default values are defined by the returned value of each instance method
   with the pattern ``default_<field name>()``.

   ``with_rec_name`` allow to add ``rec_name`` value for each many2one field.

   The ``default_rec_name`` key in the context can be used to define the value
   of the :attr:`~Model._rec_name` field.

.. classmethod:: Model.fields_get([fields_names[, level]])

   Return the definition of each field on the model.

   ``level`` defines the number of relations to include in the relation field
   definition.

.. classmethod:: Model.__names__([field[, record]])

   Return a dictionary with the name of the ``model``, the ``field`` and the
   ``record`` and the ``value`` of the field.
   It is a convenience-method used to format messages which should include
   those names.

Instance methods:

.. method:: Model.on_change(fieldnames)

   Return the list of changes by calling ``on_change`` method of each field.

.. method:: Model.on_change_with(fieldnames)

   Return the new values of all fields by calling ``on_change_with`` method of
   each field.

.. method:: Model.on_change_notify(fieldnames)

    Returns a list of type and message couple to display on the client side.
    Available types are ``info``, ``warning`` and ``error``.

    .. note::
      To be called by the client, this method must be decorated
      by :meth:`~trytond.model.fields.depends` with the fields needed.

.. method:: Model.pre_validate()

   Validate the instance before being stored.
   This method is called by the client to validate the instance.

ModelView
=========

.. class:: ModelView

Add the requirements to display the record in a view.

Class attributes:

.. attribute:: ModelView._buttons

   A dictionary with button name as key and the states dictionary for the
   button.
   The keys are ``invisible``, ``readonly`` and ``icon`` which have a
   :class:`~trytond.pyson.PYSON` statement as value and ``depends`` which has a
   list of field names on which the states depend.
   This is used as default attributes of the buttons for the views that show
   them.

Static methods:

.. staticmethod:: ModelView.button()

   Decorate button's method to check group access and rule.

.. staticmethod:: ModelView.button_action(action)

   Same as :meth:`~ModelView.button` but return the id of the XML id action or
   the action value updated by the returned value of the method.

.. staticmethod:: ModelView.button_change([\*fields[, methods]])

   Same as :meth:`~ModelView.button` but for button that change values of the
   fields on client side (similar to :ref:`on_change
   <topics-fields_on_change>`).

   ``methods`` can be used to duplicate the field names from other decorated
   methods.
   This is useful if the decorated method calls another method.

   .. note::
      Only on instance methods.

Class methods:

.. classmethod:: ModelView.fields_view_get([view_id[, view_type[, level]]])

   Return a view definition used by the client.
   The definition is::

        {
            'model': model name,
            'type': view type,
            'view_id': view id,
            'arch': XML description,
            'fields': {
                field name: {
                    ...
                },
            },
            'field_childs': field for tree,
        }

.. classmethod:: ModelView.view_toolbar_get()

   Returns the model specific actions and exports in a dictionary with keys:

   ``print``
      a list of available reports.
   ``action``
      a list of available actions.
   ``relate``
      a list of available relations.
   ``exports``
      a list of available exports.

.. classmethod:: ModelView.view_attributes()

   Returns a list of XPath, attribute, value and an optional depends list.
   Each element from the XPath will get the attribute set with the JSON encoded
   value.
   If the depends list is set its fields are added to the view if the xpath
   matches at least one element.

   .. note::

      The ``view_id`` is set to the
      :attr:`~trytond.transaction.Transaction.context` when this method is
      called.

.. classmethod:: ModelView.parse_view(tree, type[, view_id[, field_children[, level[, view_depends]]]])

   Return the sanitized XML and the corresponding fields definition.

   .. note::

      This method is public mainly to allow modification the existing XML of
      the view by code.

ModelStorage
============

.. class:: ModelStorage

Add storage capability of record.

Class attributes are:

.. attribute:: ModelStorage.create_uid

   The definition of the :class:`~fields.Many2One` field that points to the
   user who created the record.

.. attribute:: ModelStorage.create_date

   The definition of the :class:`~fields.Timestamp` field that stores the
   creation time of the record.

.. attribute:: ModelStorage.write_uid

   The definition of the :class:`~fields.Many2One` field that points to the
   last user who modified the record.

.. attribute:: ModelStorage.write_date

   The definition of the :class:`~fields.Timestamp` field that stored the last
   modification time of the record.

.. attribute:: ModelStorage.rec_name

   The name of the :class:`~fields.Field` used as record name.

Static methods:

.. staticmethod:: ModelStorage.default_create_uid()

    Return the default value for :attr:`create_uid`.

.. staticmethod:: ModelStorage.default_create_date()

    Return the default value for :attr:`create_date`.

Class methods:

.. classmethod:: ModelStorage.create(vlist)

   Create records.

   ``vlist`` is list of dictionaries with fields names as key and created
   values as value and return the list of new instances.

.. classmethod:: ModelStorage.trigger_create(records)

   Trigger create actions.
   It calls actions defined in ``ir.trigger`` with ``on_create`` set and
   ``condition`` is true.

.. classmethod:: ModelStorage.read(ids, fields_names)

   Return a list of dictionary for the record ids.
   The dictionary is composed of the fields as key and their values.

   ``fields_names`` can contain dereferenced fields from related models.
   Their values will be returned under the referencing field suffixed by a
   ``.``.
   The number of *dots* in the name is not limited.

   The virtual fields ``_write`` and ``_delete`` can be used the read the
   writeable and deleteable state of the records.
   Regarding the ``_timestamp`` virtual fields it contains a timestamp that is
   used in the context to make a soft lock preventing update collisions.

   .. note::
      The order of the returned list is not guaranteed.

.. classmethod:: ModelStorage.index_get_field(name)

   Return the index to order of the calls to field get.

.. classmethod:: ModelStorage.write(records, values, [[records, values], ...])

   Write ``values`` on the list of records.

   ``values`` is a dictionary with fields names as key and writen values as
   value.

.. classmethod:: ModelStorage.trigger_write_get_eligibles(records)

   Return eligible records for write actions by triggers.
   This dictionary is to pass to :meth:`~ModelStorage.trigger_write`.

.. classmethod:: ModelStorage.trigger_write(eligibles)

   Trigger write actions.
   It will call actions defined in ``ir.trigger`` with ``on_write`` set and
   ``condition`` was false before :meth:`~ModelStorage.write` and true after.

.. classmethod:: ModelStorage.index_set_field(name)

   Return the index to order of the calls to field set.

.. classmethod:: ModelStorage.delete(records)

   Delete records.

.. classmethod:: ModelStorage.trigger_delete(records)

   Trigger delete actions.
   It will call actions defined in ``ir.trigger`` with ``on_delete`` set and
   ``condition`` is true.

.. classmethod:: ModelStorage.copy(records[, default])

   Duplicate the records.

   ``default`` is a dictionary of default value per field name for the created
   records.

   The values of ``default`` may be also callable that take a dictionary
   containing the fields and values of the record copied and return of the
   value.

   The keys of ``default`` may use the dotted notation for the
   :class:`~fields.One2Many` to define the default to pass to its ``copy``
   operation.

   New records are returned following the input order.

.. classmethod:: ModelStorage.search(domain[, offset[, limit[, order[, count]]]])

   Return a list of records that match the :ref:`domain <topics-domain>`.

   If ``offset`` or ``limit`` are set, the result starts at the offset and has
   the length of the limit.

   The ``order`` is a list of tuples defining the order of the result::

      [ ('field name', 'ASC'), ('other field name', 'DESC'), ... ]

   The first element of the tuple is a field name of the model and the second
   is the sort ordering as ``ASC`` for ascending, ``DESC`` for descending or
   empty for a default order.
   This second element may contain ``NULLS FIRST`` or ``NULLS LAST`` to sort
   null values before or after non-null values.
   If neither is specified the default behavior of the backend is used.

   In case the field used is a :class:`~fields.Many2One`, it is also possible
   to use the dotted notation to sort on a specific field from the target
   record.
   Or for a :class:`~fields.Dict` field, the dotted notation is used to sort on
   the key's value.

   If ``count`` is set to ``True``, then the result is the number of records.
   The count result is limited upto the value of ``limit`` if set.

.. classmethod:: ModelStorage.search_count(domain[, offset[, limit]])

   Return the number of records that match the :ref:`domain <topics-domain>`.

   The result is limited upto the value of ``limit`` if set and reduced by offset.

.. classmethod:: ModelStorage.search_read(domain[, offset[, limit[, order[, fields_names]]]])

   Call :meth:`search` and :meth:`read` at once.

   Useful for the client to reduce the number of calls.

.. classmethod:: ModelStorage.search_rec_name(name, clause)

   :attr:`~fields.Function.searcher` for the :class:`~fields.Function` field
   :attr:`rec_name`.

.. classmethod:: ModelStorage.search_global(cls, text)

   Yield tuples (record, name, icon) for records matching text.

   It is used for the global search.

.. classmethod:: ModelStorage.count()

   Return an estimation of the number of records stored.

.. classmethod:: ModelStorage.browse(ids)

   Return a list of record instance for the ``ids``.

.. classmethod:: ModelStorage.export_data(records, fields_names[, header])

   Return a list of list of values for each ``records``.

   The list of values follows ``fields_names``.
   The result includes the description of the fields if ``header`` is set.

   Relational fields are defined with ``/`` at any depth.

   Descriptor on fields are available by appending ``.`` and the name of the
   method on the field that returns the descriptor.

.. classmethod:: ModelStorage.export_data_domain(domain, fields_names[, offset[, limit[, order[, header]]]])

   Call :meth:`search` and :meth:`export_data` together.

   Useful for the client to reduce the number of calls and the data transfered.

.. classmethod:: ModelStorage.import_data(fields_names, data)

   Create or update records for all values in ``data``.

   The field names of values must be defined in ``fields_names``.
   It returns the number of imported records.

.. classmethod:: ModelStorage.check_xml_record(records, values)

   Verify if the records are originating from XML data.

   It is used to prevent modification of data coming from XML files.

   .. note::
      This method must be overiden to change this behavior.

.. classmethod:: ModelStorage.validate(records)

   Validate the integrity of records after creation and modification.

   This method must be overridden to add validation and must raise an
   :exc:`~trytond.model.exceptions.ValidationError` if validation fails.


.. classmethod:: ModelStorage.validate_fields(records, field_names)

   Validate the integrity of records after modification of the fields. This
   method must be overridden to add validation for the field names set and must
   raise an exception if validation fails.

Dual methods:

.. classmethod:: ModelStorage.save(records)

   Save the modification made on the records.

Instance methods:

.. method:: ModelStorage.resources()

   Return a dictionary with the number of attachments (``attachment_count``),
   notes (``note_count``) and unread note (``note_unread``).

.. method:: ModelStorage.get_rec_name(name)

   :attr:`~fields.Function.getter` for the :class:`~fields.Function` field
   :attr:`rec_name`.

ModelSQL
========

.. class:: ModelSQL

Implement :class:`ModelStorage` for an SQL database.

Class attributes are:

.. attribute:: ModelSQL._table

   The name of the database table which is mapped to the class.

   If not set, the value of :attr:`~Model.__name__` is used with dots converted
   to underscores.

.. attribute:: ModelSQL._order

   The default ``order`` parameter of :meth:`~ModelStorage.search` method.

.. attribute:: ModelSQL._order_name

   The name of the field on which the records must be sorted when sorting on a
   field refering to the model.

   If not set, :attr:`~Model._rec_name` is used.

.. attribute:: ModelSQL._history

   If true, all changes on records are stored in an history table.

.. attribute:: ModelSQL._sql_constraints

   A list of SQL constraints that are added on the table::

      [ (<constraint name>, <constraint>, <xml id>), ... ]

   constraint name
      The name of the SQL constraint in the database.

   constraint
      An instance of :class:`Constraint`

   xml id
      The message id for :meth:`~trytond.i18n.gettext`

.. attribute:: ModelSQL._sql_indexes

   A :py:class:`set <set>` containing the :class:`Index` that are created on
   the table.

Class methods:

.. classmethod:: ModelSQL.__table__()

   Return a SQL Table instance for the Model.

.. classmethod:: ModelSQL.__table_history__()

   Return a SQL Table instance for the history of Model.

.. classmethod:: ModelSQL.__table_handler__([module_name[, history]])

   Return a :class:`~trytond.backend.TableHandler` instance for the Model.

.. classmethod:: ModelSQL.table_query()

   Could be defined to use a custom SQL query instead of a table of the
   database.
   It should return a SQL FromItem.

   .. warning::
      By default all CRUD operation raises an error on models implementing this
      method so the :meth:`~ModelStorage.create`, :meth:`~ModelStorage.write`
      and :meth:`~ModelStorage.delete` methods may also been overriden if
      needed.

.. classmethod:: ModelSQL.history_revisions(ids)

   Return a sorted list of all revisions for ids.

   The list is composed of the date, id and username of the revision.

.. classmethod:: ModelSQL.restore_history(ids, datetime)

   Restore the record ids from history at the specified date time.

   Restoring a record still generates an entry in the history table.

   .. warning::
      No access rights are verified and the records are not validated.

.. classmethod:: ModelSQL.restore_history_before(ids, datetime)

   Restore the record ids from history before the specified date time.

   Restoring a record still generates an entry in the history table.

   .. warning::
      No access rights are verified and the records are not validated.

.. classmethod:: ModelSQL.search(domain[, offset[, limit[, order[, count[, query]]]]])

   Same as :meth:`ModelStorage.search` with the additional ``query`` argument.

   If ``query`` is set to ``True``, the the result is the SQL query.

.. classmethod:: ModelSQL.search_domain(domain[, active_test[, tables]])

   Convert a :ref:`domain <topics-domain>` into a SQL expression by returning
   the updated tables dictionary and a SQL expression.

   .. _ref-tables:

   Where ``tables`` is a nested dictionary containing the existing joins::

        {
            None: (<Table invoice>, None),
            'party': {
                None: (<Table party>, <join_on sql expression>),
                'addresses': {
                    None: (<Table address>, <join_on sql expression>),
                    },
                },
            }

Dual methods:

.. classmethod:: ModelSQL.lock([records])

   Take a lock for update on the records or take a lock on the whole table.

Constraint
----------

.. class:: Constraint(table)

Represent a SQL constraint for the ``table``.

Instance attributes:

.. attribute:: Constraint.table

   The SQL Table on which the constraint is defined.

Check
^^^^^

.. class:: Check(table, expression)

Represent a check :class:`Constraint` which enforce the validity of the
``expression``.

Instance attributes:

.. attribute:: Check.expression

   The SQL expression to check.

Unique
^^^^^^

.. class:: Unique(table, \*columns)

Represent a unique :class:`Constraint` which enforce the uniqueness of the
group of columns.

Instance attributes:

.. attribute:: Unique.columns

   The tuple of SQL Column instances.

.. attribute:: Unique.operators

   The tuple of ``Equal`` operators.

Exclude
^^^^^^^

.. class:: Exclude(table[, (expression, operator), ...[, where]])

Represent an exclude :class:`Constraint` which guarantees that if any two rows
are compared on the specified expression using the specified operator not all
of these comparisons will return ``TRUE``.

Instance attributes:

.. attribute:: Exclude.excludes

   The tuple of expression and operator.

.. attribute:: Exclude.columns

   The tuple of expressions.

.. attribute:: Exclude.operators

   The tuple of operators.

.. attribute:: Exclude.where

   The clause for which the exclusion applies.

Index
-----

.. class:: Index(table[, \*expressions, [, \*\*options]])

Represent a SQL index for the ``table`` for the sequence of ``expressions``.
An ``expression`` is a :py:class:`tuple <tuple>` of SQL expression and a
:attr:`~Index.Usage`.

Available options are:

   * ``include``: a list of columns to include in the index
   * ``where``: the where clause for partial index

.. attribute:: Index.Unaccent(expression)

Apply unaccent function if the database supports it.

.. attribute:: Index.Usage(\*\*options)

Represent a usage of a SQL expression.
Available options are:

   * ``collation``: the name of the collation
   * ``order``: the sort order

.. attribute:: Index.Equality(\*\*options)

Represent an equality usage.

.. attribute:: Index.Range(\*\*options)

Represent an range usage.

.. attribute:: Index.Similarity(\*\*options)

Represent a similar usage only for text.
Additional options are available:

   * ``begin``: optimize for constant pattern and anchored to the beginning of
     the string

Workflow
========

.. class:: Workflow

A mixin_ to handle transition check.

Class attribute:

.. attribute:: Workflow._transition_state

   The name of the field that will be used to check state transition.
   The default value is 'state'.

.. attribute:: Workflow._transitions

   A set containing tuples of from and to state.

Static methods:

.. staticmethod:: Workflow.transition(state)

   Decorate method to filter records for which the transition is valid and
   finally to update the state of the filtered record.

ModelSingleton
==============

.. class:: ModelSingleton

Modify :class:`ModelStorage` into a singleton_.
This means that there will be only one record of this model.

It is commonly used to store configuration value.

.. _singleton: http://en.wikipedia.org/wiki/Singleton_pattern

Class methods:

.. classmethod:: ModelSingleton.get_singleton()

   Return the instance of the unique record if there is one.

DictSchemaMixin
===============

.. class:: DictSchemaMixin

A mixin_ for the schema of :class:`~fields.Dict` field.

Class attributes are:

.. attribute:: DictSchemaMixin.name

   A :class:`~fields.Char` field for the name of the key.

.. attribute:: DictSchemaMixin.string

   A :class:`~fields.Char` field for the string of the key.

.. attribute:: DictSchemaMixin.help

   The :class:`~fields.Char` field used as the help text for the key.

.. attribute:: DictSchemaMixin.type\_

   The :class:`~fields.Selection` field for the type of the key.

   The available types are:

   * boolean
   * integer
   * char
   * float
   * numeric
   * date
   * datetime
   * selection

.. attribute:: DictSchemaMixin.digits

   The :class:`~fields.Integer` field for the digits number when the type is
   ``float`` or ``numeric``.

.. attribute:: DictSchemaMixin.domain

   A :ref:`domain <topics-domain>` constraint on the dictionary key that will
   be enforced only on the client side.

   The key must be referenced by its name in the left operator of the domain.
   The :ref:`PYSON <ref-pyson>` evaluation context used to compute the domain
   is the dictionary value.
   Likewise the domain is tested using the dictionary value.

.. attribute:: DictSchemaMixin.selection

   The :class:`~fields.Text` field to store the couple of key and label when
   the type is ``selection``.

   The format is a key/label separated by ":" per line.

.. attribute:: DictSchemaMixin.selection_sorted

   If the :attr:`selection` must be sorted on label by the client.

.. attribute:: DictSchemaMixin.selection_json

   The :class:`~fields.Function` field to return the JSON_ version of the
   :attr:`selection`.

Static methods:

.. staticmethod:: DictSchemaMixin.default_digits()

   Return the default value for :attr:`digits`.

Class methods:

.. classmethod:: DictSchemaMixin.get_keys(records)

   Return the definition of the keys for the records.

.. classmethod:: DictSchemaMixin.get_relation_fields()

   Return a dictionary with the field definition of all the keys like the
   result of :meth:`Model.fields_get`.

   It is possible to disable this method (returns an empty dictionary) by
   setting in the ``dict`` section of the configuration, the
   :attr:`Model.__name__` to ``False``.

Instance methods:

.. method:: DictSchemaMixin.get_selection_json(name)

   :attr:`~fields.Function.getter` for the :attr:`selection_json`.

.. method:: DictSchemaMixin.format(value[, lang])

   Format the value using the key definition and the language.

MatchMixin
==========

.. class:: MatchMixin

A mixin_ to add to a :class:`Model` a match method on pattern.
The pattern is a dictionary with field name as key and the value to compare.
The record matches the pattern if for all dictionary entries, the value of the
record is equal or not defined.

Instance methods:

.. method:: MatchMixin.match(pattern[, match_none])

   Return if the instance match the pattern.

   If ``match_none`` is set ``None`` value of the instance will be compared.

UnionMixin
==========

.. class:: UnionMixin

A mixin_ to create a :class:`ModelSQL` which is the UNION_ of some
:class:`ModelSQL`'s. The ids of each models are sharded to be unique.

Static methods:

.. staticmethod:: UnionMixin.union_models()

   Return the list of :class:`ModelSQL`'s names

Class methods:

.. classmethod:: UnionMixin.union_shard(column, model)

   Return a SQL expression that shards the column containing record id of model
   name.

.. classmethod:: UnionMixin.union_unshard(record_id)

   Return the original instance of the record for the sharded id.

.. classmethod:: UnionMixin.union_column(name, field, table, Model)

   Return the SQL column that corresponds to the field on the union model.

.. classmethod:: UnionMixin.union_columns(model)

   Return the SQL table and columns to use for the UNION for the model name.

SymbolMixin
===========

.. class:: SymbolMixin

A mixin_ to manage the display of symbols on the client side.

Instance methods:

.. method:: SymbolMixin.get_symbol(sign, [symbol])

   Return a symbol and its position.

   The position indicates whether the symbol should appear before (0) or after
   (1) the value.
   If no symbol parameter is supplied then the mixin uses the value of
   attribute named ``symbol``.

DigitsMixin
===========

.. class:: DigitsMixin

A mixin_ to manage the digits of :attr:`fields.Float.digits` and
:attr:`fields.Numeric.digits` from a :class:`Model`.

Instance methods:

.. method:: DigitsMixin.get_digits()

   Return a tuple of two integers to use a ``digits`` attribute.

sequence_ordered
================

.. function:: sequence_ordered([field_name, [field_label, [order]]])

Return a mixin_ class which defines the order of a :class:`ModelSQL` with an
:class:`~fields.Integer` field.

``field_name`` indicates the name of the field to be created and its default
values is ``sequence``.
``field_label`` defines the label which will be used by the field and defaults
to ``Sequence``.
Order specifies the order direction and defaults to ``ASC NULLS FIRST``.

MultiValueMixin
===============

.. class:: MultiValueMixin

A mixin_ for :class:`Model` to help having :class:`~fields.MultiValue` fields
with multi-values on a :class:`ValueMixin`.
The values are stored by creating one record per pattern.
The patterns are the same as those on :class:`MatchMixin`.

Class methods:

.. classmethod:: MultiValueMixin.multivalue_model(field)

   Return the :class:`ValueMixin` on which the values are stored for the field
   name.

   The default is class name suffixed by the field name.

.. classmethod:: MultiValueMixin.setter_multivalue(records, name, value, \*\*pattern)

   :attr:`~fields.Function.getter` method for the
   :class:`trytond.model.fields.Function` fields.

Instance methods:

.. method:: MultiValueMixin.multivalue_records(field)

   Return the list of all :class:`ValueMixin` records linked to the instance.

   By default, it returns the value of the first found
   :class:`~fields.One2Many` linked to the multivalue model or all the records
   of this one.

.. method:: MultiValueMixin.multivalue_record(field, \*\*pattern)

   Return a new record of :class:`ValueMixin` linked to the instance.

.. method:: MultiValueMixin.get_multivalue(name, \*\*pattern)

   Return the value of the field ``name`` for the pattern.

.. method:: MultiValueMixin.set_multivalue(name, value[, save], \*\*pattern)

   Store the value of the field ``name`` for the pattern.

   If ``save`` is true, it will be stored in the database, otherwise the
   modified :class:`ValueMixin` records are returned unsaved.
   ``save`` is true by default.

.. warning::
    To customize the pattern, both methods must be override the same way.

ValueMixin
==========

.. class:: ValueMixin

A mixin_ to store the values of :class:`MultiValueMixin`.

DeactivableMixin
================

.. class:: DeactivableMixin

A mixin_ to add soft deletion to the model.
It renders all the fields as read-only when the record is inactive.

Class attributes are:

.. attribute:: DictSchemaMixin.active

   The definition of the :class:`trytond.model.fields.Boolean` field to store
   soft deletion state.

   False values is considered as soft deletion.

tree
====

.. function:: tree([parent[, name[, separator]]])

Return a mixin_ class :class:`TreeMixin`.

``parent`` indicates the name of the field that defines the parent of the tree
and its default value is ``parent``.
``name`` indicates the name of the field that defines the name of the record and
its default value is ``name``.
If ``separator`` is set, the :meth:`~ModelStorage.get_rec_name` constructs the
name by concatenating each parent names using it as separator and
:meth:`~ModelStorage.search_rec_name` is adapted to search across the tree.


.. class:: TreeMixin

.. classmethod:: TreeMixin.check_recursion(records)

   Helper method that checks if there is no recursion in the tree defined by
   :meth:`tree`.

avatar_mixin
============

.. function:: avatar_mixin([size[, default]])

Return a mixin_ :class:`AvatarMixin`.

``size`` defines the size of the avatar image and its default value is ``64``.
``default`` indicates the name of the field to use for generating a default
avatar, if it's not set then no default avatar is generated.

.. class:: AvatarMixin

.. attribute::  AvatarMixin.avatars

   The :class:`~fields.One2Many` field used to store the ``ir.avatar`` records.

.. attribute:: AvatarMixin.avatar

   The :class:`~fields.Binary` field that contains the avatar.

.. attribute:: AvatarMixin.avatar_url

   The :class:`~fields.Char` field that containts the URL for the avatar.

.. attribute:: AvatarMixin.has_avatar

   Indicate whether the record has an avatar.

.. classmethod:: AvatarMixin.generate_avatar(records, field)

   Generate a default avatar for each record using the field.


.. _mixin: http://en.wikipedia.org/wiki/Mixin
.. _JSON: http://en.wikipedia.org/wiki/Json
.. _UNION: http://en.wikipedia.org/wiki/Union_(SQL)#UNION_operator




================================================
FILE: doc/ref/pool.rst
================================================
.. _ref-pool:
.. module:: trytond.pool

Pool
====

.. class:: Pool([database_name])

   Store the instances of :class:`~trytond.model.Model`,
   :class:`~trytond.wizard.Wizard` and *Report* per database.

Static methods:

.. staticmethod:: Pool.register(klass, ..., type_, module[, depends])

   Register the classes of type (``model``, ``report`` or ``wizard``) for the
   module.

   If ``depends`` is set, the registration happens only if all the modules are
   activated.

.. staticmethod:: Pool.register_mixin(mixin, classinfo, module)

   Register the mixin for the module.

   The ``mixin`` are included to all subclasses of ``classinfo``.

Class methods:

.. classmethod:: Pool.start()

   Start the pool by registering all Tryton modules found.

.. classmethod:: Pool.stop(database_name)

   Stop the pool by removing instances for the database.

.. classmethod:: Pool.database_list()

   List all started databases.

Instance methods:

.. method:: Pool.get(name[, type])

   Return the named object of ``type`` from the pool.

.. method:: Pool.iterobject([type])

   Return an interator over objects of ``type``.

.. method:: Pool.fill(module, modules)

   Fill the pool with the registered classes from the module and for the
   activated modules and return a list of classes for each type in a
   dictionary.

.. method:: Pool.setup([classes])

   Call all setup methods of the classes provided or for all the registered
   classes.

.. method:: Pool.setup_mixin([type[, name]])

   Include all the mixin registered for the filled modules to the corresponding
   registered type of classes or named.


PoolMeta
--------

.. class:: PoolMeta

   A metaclass helper to setup __name__ on class to be registered in the
   :class:`Pool`.


PoolBase
--------

.. class:: PoolBase

   The base class of registered classes.

Class methods:

.. classmethod:: PoolBase.__setup__()

   Setup the class.

.. classmethod:: PoolBase.__post_setup__()

   Post setup the class.

.. classmethod:: PoolBase.__register__()

   Registare the class.


================================================
FILE: doc/ref/pyson.rst
================================================
.. _ref-pyson:
.. module:: trytond.pyson

PYSON
=====

PYSON is the Python Statement and Object Notation.

There is also a more :ref:`practical introduction into
PYSON statements <topics-pyson>`.

.. class:: PYSON

   Base class of any PYSON statement.
   It is never used directly.

Instance methods:

.. method:: PYSON.pyson()

   Return the internal dictionary representation of the statement.

.. method:: PYSON.types()

   Return a set of all possible types which the statement can become when
   evaluated.

Class methods:

.. classmethod:: PYSON.eval(dct, context)

   Return the evaluation of the statement given in ``dct`` within the
   ``context``.

   ``dct`` contains a dictionary which is the internal representation of a
   PYSON statement.

   ``context`` contains a dictionary with contextual values.


Encoder and Decoder
-------------------

.. class:: PYSONEncoder()

   Encoder for PYSON statements into string representations.

Instance methods:

.. method:: PYSONEncoder.encode(object)

   Return a string representation of a given PYSON statement.

   ``object`` contains a PYSON statement.


.. class:: PYSONDecoder([context[, noeval]])

   Decoder for string into the evaluated or not PYSON statement.

Instance methods:

.. method:: PYSONDecoder.decode(object)

   Return a PYSON statement evaluated or not of a given string.

   ``object`` contains a string.

Statements
----------

The following classes can be used as :class:`PYSON` statement:

.. contents::
   :local:
   :backlinks: entry
   :depth: 1

Eval
^^^^

.. class:: Eval(value[, default])

   Represent the PYSON statement for evaluations.

   When evaluated, it returns the value of the statement named by ``value``, if
   defined in the evaluation context, otherwise the ``default`` value (empty
   string by default).

   .. note::

      The default value determines the type of the statement.

   .. note::

      If the ``value`` includes dots the value will be dereferenced.
      For example::

         Eval('_parent_sale.number')

      The ``number`` value of the ``_parent_sale`` key of the evaluation
      context will be returned.


Not
^^^

.. class:: Not(value)

   Represent the PYSON statement for logical negations.

   When evaluated, returns the boolean negation of the value of the statement
   named by ``value``, if defined in the evaluation context.
   Returns an instance of itself.

Bool
^^^^

.. class:: Bool(value)

   Represent the PYSON statement for boolean evaluations.

   Returns the boolean representation of the value of the statement named by
   ``value``.

And
^^^

.. class:: And(\*statements)

   Represent the PYSON statement for logical *and* operations.

   Returns the result of the logical conjunction of two or more values named by
   the statements in the ``statements`` tuple.

Or
^^

.. class:: Or(\*statements)

   Represent the PYSON statement for logical *or* operations.

   Returns the result of the logical disjunction of two or more values named by
   the statements in the ``statements`` tuple.

Equal
^^^^^

.. class:: Equal(statement1, statement2)

   Represent the PYSON statement for equation comparisons.

   Returns ``True`` when a value of a statement named by ``statement1`` and the
   value of a statement named by ``statement2`` are equal, otherwise returns
   ``False``.

Greater
^^^^^^^

.. class:: Greater(statement1, statement2[, equal])

   Represent the PYSON statement for *greater-than* comparisons.

   Returns ``True`` when the value of the statement named by ``statement1`` is
   strictly greater than the value of the statement named by ``statement2``,
   otherwise returns false.
   Is the value of the variable named by ``equal`` is ``True``, then returns
   also ``True`` when both values of statements named by ``statement1`` and
   ``statement2`` are equal.
   In this case :class:`Greater` works as a *greater-than or equal* operator.

   .. note::

      ``None`` value is replaced by ``0`` for the comparison.

Less
^^^^

.. class:: Less(statement1, statement2[, equal])

   Represent the PYSON statement for *less-than* comparisons.

   Returns ``True`` when the value of the statement named by ``statement1`` is
   strictly less than the value of the statement named by ``statement2``,
   otherwise returns ``False``.
   Is the value of the variable named ``equal`` is true, then returns also true
   when both values of the statements named by ``statement1`` and
   ``statement2`` are equal.
   In this case :class:`Less`  works as a *less-than or equal* operator.

   .. note::

      ``None`` value is replaced by ``0`` for the comparison.

If
^^

.. class:: If(condition, then_statement, else_statement)

   Represent the PYSON statement for conditional flow control operations.

   Returns the value of the statement named by ``then_statement`` when the
   value of the statement named by ``condition`` evaluates true.
   Otherwise returns the value of the statement named by ``else_statement``.

Get
^^^

.. class:: Get(obj, key[, default])

   Represent the PYSON statement for dictionary look-up operations and
   evaluation.

   Look up and returns the value of a key named by ``key`` in an object named
   by ``obj`` if defined.
   Otherwise returns the value of the variable named by ``default``.

In
^^

.. class:: In(key, obj)

   Represent the PYSON statement for look-up dictionary or integer objects.

   Returns true when a list (or dictionary) object named by ``obj`` contains
   the value of the variable (or key) named by ``key``.
   Otherwise returns false.

Date
^^^^

.. class:: Date([year[, month[, day[, delta_years[, delta_month[, delta_days[, start]]]]]]])

   Represent the PYSON statement for date related conversions and basic
   calculations.

   Returns a date object which represents the values of arguments named by the
   *variables* explained below.
   Missing values of arguments named by ``year`` or ``month`` or ``day`` take
   their defaults from ``start`` or the actual date. When values of arguments
   named by ``delta_*`` are given, they are added to the values of the
   appropriate arguments in a date and time preserving manner.

   Arguments:

   ``year``
      A PYSON statement of type int or long.

   ``month``
      A PYSON statement of type int or long.

   ``day``
      A PYSON statement of type int or long.

   ``delta_years``
      A PYSON statement of type int or long.

   ``delta_month``
      A PYSON statement of type int or long.

   ``delta_days``
      A PYSON statement of type int or long.

   ``start``
      A PYSON statement of type date.

DateTime
^^^^^^^^

.. class:: DateTime([year[, month[, day[, hour[, minute[, second[, microsecond[, delta_years[, delta_months[, delta_days[, delta_hours[, delta_minutes[, delta_seconds[, delta_microseconds[, start]]]]]]]]]]]]]]])

   Represent the PYSON statement for date and time related conversions and
   calculations.

   Returns a date time object which represents the values of variables named by
   the *arguments* explained below.
   Missing values of arguments named by  ``year``, ``month``, ``day``,
   ``hour``, ``minute``, ``second``, ``microseconds`` take their defaults from
   ``start`` or the actual date and time in `UTC`_.
   When values of arguments named by ``delta_*`` are given, these are added  to
   the appropriate attributes in a date and time preserving manner.

   Arguments:

   ``year``
       A PYSON statement of type int or long.

   ``month``
       A PYSON statement of type int or long.

   ``day``
       A PYSON statement of type int or long.

   ``hour``
       A PYSON statement of type int or long.

   ``minute``
       A PYSON statement of type int or long.

   ``second``
       A PYSON statement of type int or long.

   ``microsecond``
       A PYSON statement of type int or long.

   ``delta_years``
       A PYSON statement of type int or long.

   ``delta_month``
       A PYSON statement of type int or long.

   ``delta_days``
       A PYSON statement of type int or long.

   ``delta_hours``
       A PYSON statement of type int or long.

   ``delta_minutes``
       A PYSON statement of type int or long.

   ``delta_seconds``
       A PYSON statement of type int or long.

   ``delta_microseconds``
       A PYSON statement of type int or long.

   ``start``
       A PYSON statement of type datetime.

.. _`UTC`: https://en.wikipedia.org/wiki/Coordinated_Universal_Time

Len
^^^

.. class:: Len(value)

   Represent the PYSON statement for length of a dictionary, list or string.

   Returns the number of items in ``value``.

Id
^^

.. class:: Id(module, fs_id)

   Represent the PYSON statement for filesystem id evaluations.

   When converted into the internal dictionary, it returns the database id
   stored in ``ir.model.data``.


================================================
FILE: doc/ref/rpc.rst
================================================
.. _ref-rpc:
.. module:: trytond.rpc

RPC
===

.. class:: RPC([readonly[, instantiate[, result[, check_access[, unique[, fresh_session[, cache]]]]]]])

   Define the behavior of Remote Procedure Call.

Instance attributes are:

.. attribute:: RPC.readonly

   The transaction mode

.. attribute:: RPC.instantiate

   The position or the slice of the argument to be instanciated

.. attribute:: RPC.result

   The function to transform the result

.. attribute:: RPC.check_access

   Set ``_check_access`` in the context to activate the access right on model
   and field.
   Default is ``True``.

.. attribute:: RPC.unique

   If set, it ensures the instantiated records are unique.
   Default is ``True``.

.. attribute:: RPC.fresh_session

   If set, it requires a fresh session.
   Default is ``False``.

.. attribute:: RPC.cache

   A :class:`RPCCache` instance to compute the cache duration for the answer.


RPCCache
--------

.. class:: RPCCache([days[, seconds])

   Define cache duration of RPC result.

Instance attributes are:

.. attribute:: RPC.duration

   A :py:class:`datetime.timedelta` instance.

Instance methods are:

.. method:: RCP.headers

   Return a dictionary of the headers.


================================================
FILE: doc/ref/sendmail.rst
================================================
.. _ref-sendmail:
.. module:: trytond.sendmail

Sendmail
========

.. function:: sendmail_transactional(from_addr, to_addrs, msg[, transaction[, datamanager[, strict]]])

   Send email message only if the current transaction is successfully committed.

   The required arguments are an :rfc:`5322` from-address string, a list of
   :rfc:`5322` to-address strings (a bare string is treated as a list with 1
   address), and an email message.
   The caller may pass a :class:`~trytond.transaction.Transaction` instance to
   join otherwise the current one is joined.
   A specific data manager can be specified otherwise the default
   :class:`SMTPDataManager` is used for sending email.
   The strict value is passed to instantiate the default :class:`SMTPDataManager`.

   .. warning::

      An SMTP failure is only logged without raising any exception.

.. function:: sendmail(from_addr, to_addrs, msg[, server[, strict]])

   Send email message like :meth:`sendmail_transactional` but directly without
   caring about the transaction and return the ``server``.

   The caller may pass a server instance from `smtplib`_.
   It may return a new server instance if a reconnection was needed and if the
   instance comes from :meth:`get_smtp_server`.
   If strict is ``True``, an exception is raised if it is not possible to
   connect to the server.

.. function:: get_smtp_server([uri[, strict]])

   Return a SMTP instance from `smtplib`_ using the ``uri`` or the one defined
   in the ``email`` section of the :ref:`configuration <topics-configuration>`.
   If strict is ``True``, an exception is raised if it is not possible to
   connect to the server.


.. class:: SMTPDataManager([uri[, strict]])

   Implement a data manager which send queued email at commit.

   An option optional ``uri`` can be passed to configure the SMTP connection.
   If strict is ``True``, the data manager prevents the transaction if it fails
   to send the emails.

.. method:: SMTPDataManager.put(from_addr, to_addrs, msg)

   Queue the email message to send.

.. _`smtplib`: https://docs.python.org/2/library/smtplib.html


================================================
FILE: doc/ref/tests.rst
================================================
.. _ref-test:
.. module:: trytond.tests.test_tryton

Tests
=====

.. attribute:: DB_NAME

   The name of the database to use for testing.
   Its value is taken from the environment variable of the same name.

.. attribute:: USER

   The user id used to test the transactions

.. attribute:: CONTEXT

   The context used to test the transactions

.. function:: activate_module(name)

   Activate the named module for the tested database.

   In case database does not exist and the ``DB_CACHE`` environment variable is
   set then Tryton restores a backup found in the directory pointed by
   ``DB_CACHE``.
   Otherwise it procees to the creation of the database and the activation of
   the module.

ModuleTestCase
--------------

.. class:: ModuleTestCase()

   A subclass of `unittest.TestCase`_ that tests a Tryton module.
   Some tests are included to ensure that the module works properly.

   It creates a temporary database with the module activated in setUpClass_ and
   drops it in the tearDownClass_ method.

.. attribute:: ModuleTestCase.module

   Name of the tested module.

.. _`unittest.TestCase`: https://docs.python.org/library/unittest.html#test-cases
.. _setUpClass: https://docs.python.org/library/unittest.html#unittest.TestCase.setUpClass
.. _tearDownClass: https://docs.python.org/library/unittest.html#unittest.TestCase.tearDownClass

Helpers
-------

.. function:: with_transaction(user=1, context=None)

   Return a decorator to run a test case inside a
   :class:`~trytond.transaction.Transaction`.
   It is rolled back and the cache cleared at the end of the test.

doctest helpers
---------------

.. function:: doctest_setup

   Prepare the run of the `doctest`_ by creating a database and dropping it
   beforehand if necessary.
   This function should be used as the ``setUp`` parameter.

   .. deprecated:: 4.2

      The ``doctest_setup`` function should not be used anymore to set up
      :py:func:`~doctest.DocFileSuite`.
      New modules should use :func:`~trytond.tests.tools.activate_modules`
      instead.

.. function:: doctest_teardown()

   Clean up after the run of the doctest_ by dropping the database.
   It should be used as ``tearDown`` parameter when creating a
   ``DocFileSuite``.

.. attribute:: doctest_checker

   A specialized doctest checker to ensure the Python compatibility.


.. function:: load_doc_tests(name, path, loader, tests, pattern)

   An helper that follows the ``load_tests`` protocol to load as
   :py:class:`~doctest.DocTest` all ``*.rst`` files in ``directory``,
   with the module ``name`` and the ``path`` to the module file from which the
   doc tests are registered.

.. function:: suite()

   A function returning a subclass of ``unittest.TestSuite`` that drops the
   database if it does not exist prior to the run of the tests.

.. _doctest: https://docs.python.org/library/doctest.html

.. module:: trytond.tests.tools

Tools
-----

.. function:: activate_modules(modules)

   Activate a list of ``modules`` for scenario based on proteus doctests.

.. function:: set_user(user, config)

   Set the user of the ``config`` proteus connection to ``user``.


================================================
FILE: doc/ref/tools/email.rst
================================================
.. _ref-tools-email_:
.. module:: trytond.tools.email_

Email
=====

.. function:: set_from_header(message, sender, from\_)

   Fill email headers to appear at best from the address.


================================================
FILE: doc/ref/tools/immutabledict.rst
================================================
.. _ref-immutabledict:
.. module:: trytond.tools.immutabledict

ImmutableDict
=============

.. class:: ImmutableDict

   Implement an immutable dictionary.


================================================
FILE: doc/ref/tools/index.rst
================================================
.. _ref-tools-index:

=====
Tools
=====

Tools API reference.

.. toctree::
    :maxdepth: 1

    misc
    email
    singleton
    immutabledict
    timezone


================================================
FILE: doc/ref/tools/misc.rst
================================================
.. _ref-tools:
.. module:: trytond.tools

Miscellaneous
=============

.. function:: file_open(name[, mode[, subdir[, encoding]]])

   Open the named file in subdir from the root directory.

.. function:: find_path(name[, subdir])

   Return the path of the named file in subdir from root directory.

.. function:: find_dir(name[, subdir])

   Return the path of the named directory in subdir from root directory.

.. function:: resolve(name)

   Resolve a dotted name to a global object.

.. function:: unescape_wildcard(string[, wildcards[, escape]])

   Return the string without the wild card escapes.

.. function:: is_full_text(value[, escape])

   Determine if the value can be used as full text search.

   This is the case when the value starts and ends with a ``%`` or does not
   contain any wild cards.

.. function:: sql_pairing(x, y)

   Return an SQL expression that pairs SQL integers x and y.

.. function:: firstline(text)

   Return first non-empty line of a text field.

.. function:: remove_forbidden_chars(value)

   Return a copy of the string with forbidden char from
   :class:`~trytond.model.fields.Char` replaced by space.


================================================
FILE: doc/ref/tools/singleton.rst
================================================
.. _ref-tools-singleton:
.. module:: trytond.tools.singleton

Singleton
=========

.. class:: Singleton

   A metaclass to create a `singleton`_ object.

.. _`singleton`: http://en.wikipedia.org/wiki/Singleton_pattern


================================================
FILE: doc/ref/tools/timezone.rst
================================================
.. _ref-tools-timezone:
.. module:: trytond.tools.timezone

timezone
========

.. function:: get_tzinfo(zoneid)

   Get a class representing a IANA time zone specified by the string ``zoneid``.

.. function:: available_timezones()

   Return a set of all the valid IANA keys available.

.. attribute:: UTC

   The UTC :py:class:`datetime.tzinfo` instance.

.. attribute:: SERVER

   The server timezone :py:class:`datetime.tzinfo` instance.

   Tryton tests the environment variables ``TRYTOND_TZ`` and ``TZ`` in this
   order to select to IANA key to use.
   If they are both empty, it defaults to ``UTC``.


================================================
FILE: doc/ref/transaction.rst
================================================
.. _ref-transaction:
.. module:: trytond.transaction

Transaction
===========

.. class:: Transaction

   Represents a Tryton transaction that contains thread-local parameters of a
   database connection.
   The Transaction instances are `context manager`_ that commits or
   rollbacks the database transaction.
   In the event of an exception the transaction is rolled back, otherwise it is
   commited.

.. attribute:: Transaction.database

   The database.

.. attribute:: Transaction.readonly

.. attribute:: Transaction.connection

   The database connection as defined by the `PEP-0249`_.

.. attribute:: Transaction.user

   The id of the user.

.. attribute:: Transaction.context

.. attribute:: Transaction.create_records

.. attribute:: Transaction.delete_records

.. attribute:: Transaction.trigger_records

.. attribute:: Transaction.check_warnings

    The set of warnings already checked.

.. attribute:: Transaction.timestamp

.. attribute:: Transaction.started_at

   The monotonic timestamp when the transaction started.

.. attribute:: Transaction.language

   The language code defines in the context.

.. attribute:: Transaction.counter

   Count the number of modification made in this transaction.

.. staticmethod:: Transaction.monotonic_time

   Return a monotonic time used to populate :attr:~Transaction.started_at.

.. method:: Transaction.start(database_name, user[, readonly[, context[, close[, autocommit]]]])

   Start a new transaction and return a `context manager`_.
   The non-readonly transaction will be committed when exiting the ``with``
   statement without exception.
   The other cases will be rollbacked.

.. method:: Transaction.stop([commit])

   Stop the transaction.
   If commit is ``True``, the transaction will be committed otherwise it will
   be rollbacked.
   The `context manager`_ returned by :meth:`~Transaction.start` should be used
   instead of calling this method.

.. method:: Transaction.set_context(context, \**kwargs)

   Update the transaction context and return a `context manager`_.
Download .txt
gitextract_kai1xkwn/

├── .drone.yml
├── .flake8
├── .hgtags
├── .isort.cfg
├── CHANGELOG
├── COPYRIGHT
├── LICENSE
├── MANIFEST.in
├── README.rst
├── bin/
│   ├── trytond
│   ├── trytond-admin
│   ├── trytond-console
│   ├── trytond-cron
│   ├── trytond-stat
│   └── trytond-worker
├── doc/
│   ├── conf.py
│   ├── index.rst
│   ├── ref/
│   │   ├── backend.rst
│   │   ├── bus.rst
│   │   ├── cache.rst
│   │   ├── exceptions.rst
│   │   ├── fields.rst
│   │   ├── filestore.rst
│   │   ├── i18n.rst
│   │   ├── index.rst
│   │   ├── models.rst
│   │   ├── pool.rst
│   │   ├── pyson.rst
│   │   ├── rpc.rst
│   │   ├── sendmail.rst
│   │   ├── tests.rst
│   │   ├── tools/
│   │   │   ├── email.rst
│   │   │   ├── immutabledict.rst
│   │   │   ├── index.rst
│   │   │   ├── misc.rst
│   │   │   ├── singleton.rst
│   │   │   └── timezone.rst
│   │   ├── transaction.rst
│   │   └── wizard.rst
│   ├── releases.rst
│   ├── topics/
│   │   ├── access_rights.rst
│   │   ├── actions.rst
│   │   ├── backend_types.rst
│   │   ├── bus.rst
│   │   ├── configuration.rst
│   │   ├── cron.rst
│   │   ├── domain.rst
│   │   ├── index.rst
│   │   ├── install.rst
│   │   ├── logs.rst
│   │   ├── models/
│   │   │   ├── fields_default_value.rst
│   │   │   ├── fields_on_change.rst
│   │   │   └── index.rst
│   │   ├── modules/
│   │   │   └── index.rst
│   │   ├── pyson.rst
│   │   ├── reports/
│   │   │   └── index.rst
│   │   ├── rpc.rst
│   │   ├── setup_database.rst
│   │   ├── start_server.rst
│   │   ├── task_queue.rst
│   │   ├── testing.rst
│   │   ├── translation.rst
│   │   ├── triggers.rst
│   │   ├── user_application.rst
│   │   ├── user_errors_warnings.rst
│   │   ├── views/
│   │   │   ├── extension.rst
│   │   │   └── index.rst
│   │   └── wizard.rst
│   └── tutorial/
│       ├── index.rst
│       └── module/
│           ├── anatomy.rst
│           ├── default_values.rst
│           ├── domains.rst
│           ├── extend.rst
│           ├── function_fields.rst
│           ├── index.rst
│           ├── model.rst
│           ├── on_change.rst
│           ├── report.rst
│           ├── setup.rst
│           ├── setup_database.rst
│           ├── states.rst
│           ├── table_query.rst
│           ├── view.rst
│           ├── wizard.rst
│           └── workflow.rst
├── setup.py
├── tox.ini
└── trytond/
    ├── __init__.py
    ├── admin.py
    ├── application.py
    ├── backend/
    │   ├── __init__.py
    │   ├── database.py
    │   ├── postgresql/
    │   │   ├── __init__.py
    │   │   ├── database.py
    │   │   ├── init.sql
    │   │   └── table.py
    │   ├── sqlite/
    │   │   ├── __init__.py
    │   │   ├── database.py
    │   │   ├── init.sql
    │   │   └── table.py
    │   └── table.py
    ├── bus.py
    ├── cache.py
    ├── commandline.py
    ├── config.py
    ├── console.py
    ├── const.py
    ├── convert.py
    ├── cron.py
    ├── exceptions.py
    ├── filestore.py
    ├── i18n.py
    ├── ir/
    │   ├── __init__.py
    │   ├── action.py
    │   ├── action.xml
    │   ├── attachment.py
    │   ├── attachment.xml
    │   ├── avatar.py
    │   ├── cache.py
    │   ├── calendar_.py
    │   ├── calendar_.xml
    │   ├── configuration.py
    │   ├── cron.py
    │   ├── cron.xml
    │   ├── date.py
    │   ├── email.xml
    │   ├── email_.py
    │   ├── error.py
    │   ├── error.xml
    │   ├── exceptions.py
    │   ├── export.py
    │   ├── export.xml
    │   ├── fonts/
    │   │   └── LICENSE
    │   ├── ir.xml
    │   ├── lang.py
    │   ├── lang.xml
    │   ├── locale/
    │   │   ├── bg.po
    │   │   ├── ca.po
    │   │   ├── cs.po
    │   │   ├── de.po
    │   │   ├── es.po
    │   │   ├── es_419.po
    │   │   ├── et.po
    │   │   ├── fa.po
    │   │   ├── fi.po
    │   │   ├── fr.po
    │   │   ├── hu.po
    │   │   ├── id.po
    │   │   ├── it.po
    │   │   ├── lo.po
    │   │   ├── lt.po
    │   │   ├── nl.po
    │   │   ├── pl.po
    │   │   ├── pt.po
    │   │   ├── ro.po
    │   │   ├── ru.po
    │   │   ├── sl.po
    │   │   ├── tr.po
    │   │   ├── uk.po
    │   │   └── zh_CN.po
    │   ├── message.py
    │   ├── message.xml
    │   ├── model.py
    │   ├── model.xml
    │   ├── module.py
    │   ├── module.xml
    │   ├── note.py
    │   ├── note.xml
    │   ├── queue.xml
    │   ├── queue_.py
    │   ├── resource.py
    │   ├── routes.py
    │   ├── rule.py
    │   ├── rule.xml
    │   ├── sequence.py
    │   ├── sequence.xml
    │   ├── session.py
    │   ├── translation.py
    │   ├── translation.xml
    │   ├── trigger.py
    │   ├── trigger.xml
    │   ├── tryton.cfg
    │   ├── ui/
    │   │   ├── __init__.py
    │   │   ├── board.rnc
    │   │   ├── board.rng
    │   │   ├── calendar.rnc
    │   │   ├── calendar.rng
    │   │   ├── form.rnc
    │   │   ├── form.rng
    │   │   ├── graph.rnc
    │   │   ├── graph.rng
    │   │   ├── icon.py
    │   │   ├── icon.xml
    │   │   ├── icons/
    │   │   │   └── LICENSE
    │   │   ├── menu.py
    │   │   ├── menu.xml
    │   │   ├── tree.rnc
    │   │   ├── tree.rng
    │   │   ├── ui.xml
    │   │   ├── view.py
    │   │   └── view.xml
    │   └── view/
    │       ├── action_act_window_domain_form.xml
    │       ├── action_act_window_domain_list.xml
    │       ├── action_act_window_domain_list2.xml
    │       ├── action_act_window_form.xml
    │       ├── action_act_window_list.xml
    │       ├── action_act_window_view_form.xml
    │       ├── action_act_window_view_list.xml
    │       ├── action_act_window_view_list2.xml
    │       ├── action_form.xml
    │       ├── action_keyword_form.xml
    │       ├── action_keyword_list.xml
    │       ├── action_list.xml
    │       ├── action_report_form.xml
    │       ├── action_report_list.xml
    │       ├── action_url_form.xml
    │       ├── action_url_list.xml
    │       ├── action_wizard_form.xml
    │       ├── action_wizard_list.xml
    │       ├── attachment_form.xml
    │       ├── attachment_form_preview.xml
    │       ├── attachment_list.xml
    │       ├── cron_form.xml
    │       ├── cron_list.xml
    │       ├── email_form.xml
    │       ├── email_list.xml
    │       ├── email_template_form.xml
    │       ├── email_template_list.xml
    │       ├── error_form.xml
    │       ├── error_list.xml
    │       ├── export_form.xml
    │       ├── export_line_form.xml
    │       ├── export_line_list.xml
    │       ├── export_list.xml
    │       ├── icon_view_form.xml
    │       ├── icon_view_list.xml
    │       ├── lang_config_start_form.xml
    │       ├── lang_form.xml
    │       ├── lang_list.xml
    │       ├── message_form.xml
    │       ├── message_list.xml
    │       ├── model_access_form.xml
    │       ├── model_access_list.xml
    │       ├── model_button_click_form.xml
    │       ├── model_button_click_list.xml
    │       ├── model_button_form.xml
    │       ├── model_button_list.xml
    │       ├── model_button_rule_form.xml
    │       ├── model_button_rule_list.xml
    │       ├── model_data_form.xml
    │       ├── model_data_list.xml
    │       ├── model_field_access_form.xml
    │       ├── model_field_access_list.xml
    │       ├── model_field_form.xml
    │       ├── model_field_list.xml
    │       ├── model_form.xml
    │       ├── model_list.xml
    │       ├── model_print_model_graph_start_form.xml
    │       ├── module_activate_upgrade_done_form.xml
    │       ├── module_activate_upgrade_start_form.xml
    │       ├── module_config_start_form.xml
    │       ├── module_config_wizard_done_form.xml
    │       ├── module_config_wizard_first_form.xml
    │       ├── module_config_wizard_item_list.xml
    │       ├── module_config_wizard_other_form.xml
    │       ├── module_dependency_form.xml
    │       ├── module_dependency_list.xml
    │       ├── module_form.xml
    │       ├── module_list.xml
    │       ├── note_form.xml
    │       ├── note_list.xml
    │       ├── rule_form.xml
    │       ├── rule_group_form.xml
    │       ├── rule_group_list.xml
    │       ├── rule_list.xml
    │       ├── sequence_form.xml
    │       ├── sequence_list.xml
    │       ├── sequence_type_form.xml
    │       ├── sequence_type_list.xml
    │       ├── translation_clean_start_form.xml
    │       ├── translation_clean_succeed_form.xml
    │       ├── translation_export_result_form.xml
    │       ├── translation_export_start_form.xml
    │       ├── translation_form.xml
    │       ├── translation_list.xml
    │       ├── translation_set_start_form.xml
    │       ├── translation_set_succeed_form.xml
    │       ├── translation_update_start_form.xml
    │       ├── trigger_form.xml
    │       ├── trigger_list.xml
    │       ├── ui_menu_favorite_form.xml
    │       ├── ui_menu_favorite_list.xml
    │       ├── ui_menu_form.xml
    │       ├── ui_menu_list.xml
    │       ├── ui_menu_tree.xml
    │       ├── ui_view_form.xml
    │       ├── ui_view_list.xml
    │       ├── ui_view_search_form.xml
    │       ├── ui_view_search_list.xml
    │       ├── ui_view_tree_optional_form.xml
    │       ├── ui_view_tree_optional_list.xml
    │       ├── ui_view_tree_state_form.xml
    │       ├── ui_view_tree_state_list.xml
    │       ├── ui_view_tree_width_form.xml
    │       └── ui_view_tree_width_list.xml
    ├── model/
    │   ├── __init__.py
    │   ├── active.py
    │   ├── avatar.py
    │   ├── descriptors.py
    │   ├── dictschema.py
    │   ├── digits.py
    │   ├── exceptions.py
    │   ├── fields/
    │   │   ├── __init__.py
    │   │   ├── binary.py
    │   │   ├── boolean.py
    │   │   ├── char.py
    │   │   ├── date.py
    │   │   ├── dict.py
    │   │   ├── field.py
    │   │   ├── float.py
    │   │   ├── function.py
    │   │   ├── integer.py
    │   │   ├── many2many.py
    │   │   ├── many2one.py
    │   │   ├── multiselection.py
    │   │   ├── numeric.py
    │   │   ├── one2many.py
    │   │   ├── one2one.py
    │   │   ├── reference.py
    │   │   ├── selection.py
    │   │   └── text.py
    │   ├── match.py
    │   ├── model.py
    │   ├── modelsingleton.py
    │   ├── modelsql.py
    │   ├── modelstorage.py
    │   ├── modelview.py
    │   ├── multivalue.py
    │   ├── order.py
    │   ├── symbol.py
    │   ├── tree.py
    │   ├── union.py
    │   └── workflow.py
    ├── modules/
    │   └── __init__.py
    ├── pool.py
    ├── protocols/
    │   ├── __init__.py
    │   ├── dispatcher.py
    │   ├── jsonrpc.py
    │   ├── wrappers.py
    │   └── xmlrpc.py
    ├── pyson.py
    ├── report/
    │   ├── __init__.py
    │   └── report.py
    ├── res/
    │   ├── __init__.py
    │   ├── email_reset_password.html
    │   ├── exceptions.py
    │   ├── group.py
    │   ├── group.xml
    │   ├── ir.py
    │   ├── ir.xml
    │   ├── locale/
    │   │   ├── bg.po
    │   │   ├── ca.po
    │   │   ├── cs.po
    │   │   ├── de.po
    │   │   ├── es.po
    │   │   ├── es_419.po
    │   │   ├── et.po
    │   │   ├── fa.po
    │   │   ├── fi.po
    │   │   ├── fr.po
    │   │   ├── hu.po
    │   │   ├── id.po
    │   │   ├── it.po
    │   │   ├── lo.po
    │   │   ├── lt.po
    │   │   ├── nl.po
    │   │   ├── pl.po
    │   │   ├── pt.po
    │   │   ├── ro.po
    │   │   ├── ru.po
    │   │   ├── sl.po
    │   │   ├── tr.po
    │   │   ├── uk.po
    │   │   └── zh_CN.po
    │   ├── message.xml
    │   ├── res.xml
    │   ├── routes.py
    │   ├── tryton.cfg
    │   ├── user.py
    │   ├── user.xml
    │   └── view/
    │       ├── export_form.xml
    │       ├── export_list.xml
    │       ├── group_form.xml
    │       ├── group_list.xml
    │       ├── sequence_type_form.xml
    │       ├── user_application_form.xml
    │       ├── user_application_list.xml
    │       ├── user_config_start_form.xml
    │       ├── user_form.xml
    │       ├── user_form_preferences.xml
    │       ├── user_list.xml
    │       ├── user_warning_form.xml
    │       └── user_warning_tree.xml
    ├── rpc.py
    ├── security.py
    ├── sendmail.py
    ├── status.py
    ├── tests/
    │   ├── __init__.py
    │   ├── access.py
    │   ├── copy_.py
    │   ├── export_data.py
    │   ├── field_binary.py
    │   ├── field_boolean.py
    │   ├── field_char.py
    │   ├── field_context.py
    │   ├── field_date.py
    │   ├── field_datetime.py
    │   ├── field_dict.py
    │   ├── field_float.py
    │   ├── field_function.py
    │   ├── field_function.xml
    │   ├── field_integer.py
    │   ├── field_many2many.py
    │   ├── field_many2one.py
    │   ├── field_multiselection.py
    │   ├── field_numeric.py
    │   ├── field_one2many.py
    │   ├── field_one2one.py
    │   ├── field_reference.py
    │   ├── field_selection.py
    │   ├── field_text.py
    │   ├── field_time.py
    │   ├── field_timedelta.py
    │   ├── forbidden.txt
    │   ├── history.py
    │   ├── import_data.py
    │   ├── import_data.xml
    │   ├── message.xml
    │   ├── mixin.py
    │   ├── model.py
    │   ├── modelsql.py
    │   ├── modelstorage.py
    │   ├── modelview.py
    │   ├── modelview.xml
    │   ├── mptt.py
    │   ├── multivalue.py
    │   ├── path.py
    │   ├── resource.py
    │   ├── rule.py
    │   ├── sequence.xml
    │   ├── test_access.py
    │   ├── test_backend.py
    │   ├── test_bus.py
    │   ├── test_cache.py
    │   ├── test_copy.py
    │   ├── test_descriptors.py
    │   ├── test_exportdata.py
    │   ├── test_field_binary.py
    │   ├── test_field_boolean.py
    │   ├── test_field_char.py
    │   ├── test_field_context.py
    │   ├── test_field_date.py
    │   ├── test_field_datetime.py
    │   ├── test_field_depends.py
    │   ├── test_field_dict.py
    │   ├── test_field_float.py
    │   ├── test_field_function.py
    │   ├── test_field_integer.py
    │   ├── test_field_many2many.py
    │   ├── test_field_many2one.py
    │   ├── test_field_multiselection.py
    │   ├── test_field_numeric.py
    │   ├── test_field_one2many.py
    │   ├── test_field_one2one.py
    │   ├── test_field_reference.py
    │   ├── test_field_selection.py
    │   ├── test_field_text.py
    │   ├── test_field_time.py
    │   ├── test_field_timedelta.py
    │   ├── test_filestore.py
    │   ├── test_history.py
    │   ├── test_i18n.py
    │   ├── test_importdata.py
    │   ├── test_ir.py
    │   ├── test_mixins.py
    │   ├── test_model.py
    │   ├── test_model_index.py
    │   ├── test_modelsingleton.py
    │   ├── test_modelsql.py
    │   ├── test_modelstorage.py
    │   ├── test_modelview.py
    │   ├── test_mptt.py
    │   ├── test_multivalue.py
    │   ├── test_order.py
    │   ├── test_path.py
    │   ├── test_protocols.py
    │   ├── test_pyson.py
    │   ├── test_report.py
    │   ├── test_res.py
    │   ├── test_resource.py
    │   ├── test_routes.py
    │   ├── test_rpc.py
    │   ├── test_rule.py
    │   ├── test_sendmail.py
    │   ├── test_sequence.py
    │   ├── test_tools.py
    │   ├── test_transaction.py
    │   ├── test_tree.py
    │   ├── test_trigger.py
    │   ├── test_tryton.py
    │   ├── test_union.py
    │   ├── test_user.py
    │   ├── test_wizard.py
    │   ├── test_workflow.py
    │   ├── test_wsgi.py
    │   ├── tools.py
    │   ├── tree.py
    │   ├── trigger.py
    │   ├── tryton.cfg
    │   ├── wizard.py
    │   ├── wizard.xml
    │   ├── workflow.py
    │   └── workflow.xml
    ├── tools/
    │   ├── __init__.py
    │   ├── decimal_.py
    │   ├── domain_inversion.py
    │   ├── email_.py
    │   ├── gevent.py
    │   ├── immutabledict.py
    │   ├── misc.py
    │   ├── multivalue.py
    │   ├── singleton.py
    │   ├── string_.py
    │   └── timezone.py
    ├── transaction.py
    ├── tryton.rnc
    ├── tryton.rng
    ├── url.py
    ├── wizard/
    │   ├── __init__.py
    │   └── wizard.py
    ├── worker.py
    └── wsgi.py
Download .txt
Showing preview only (319K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4290 symbols across 224 files)

FILE: doc/conf.py
  function get_info (line 8) | def get_info():

FILE: setup.py
  function read (line 14) | def read(fname):
  function get_version (line 20) | def get_version():
  class rnc2rng (line 25) | class rnc2rng(Command):
    method initialize_options (line 29) | def initialize_options(self):
    method finalize_options (line 32) | def finalize_options(self):
    method run (line 35) | def run(self):

FILE: trytond/admin.py
  function run (line 21) | def run(options):
  function validate (line 130) | def validate(models, percentage=100):

FILE: trytond/backend/database.py
  class DatabaseInterface (line 13) | class DatabaseInterface(object):
    method __new__ (line 20) | def __new__(cls, name=''):
    method __init__ (line 23) | def __init__(self, name=''):
    method connect (line 26) | def connect(self):
    method get_connection (line 29) | def get_connection(self, autocommit=False, readonly=False):
    method put_connection (line 32) | def put_connection(self, connection, close=False):
    method close (line 35) | def close(self):
    method create (line 39) | def create(cls, connection, database_name):
    method drop (line 43) | def drop(cls, connection, database_name):
    method list (line 46) | def list(self, hostname=None):
    method init (line 49) | def init(self):
    method test (line 52) | def test(self, hostname=None):
    method nextid (line 58) | def nextid(self, connection, table):
    method setnextid (line 61) | def setnextid(self, connection, table, value):
    method currid (line 64) | def currid(self, connection, table):
    method lock (line 68) | def lock(cls, connection, table):
    method lock_id (line 71) | def lock_id(self, id, timeout=None):
    method has_constraint (line 74) | def has_constraint(self, constraint):
    method has_returning (line 77) | def has_returning(self):
    method has_multirow_insert (line 80) | def has_multirow_insert(self):
    method has_select_for (line 83) | def has_select_for(self):
    method get_select_for_skip_locked (line 86) | def get_select_for_skip_locked(self):
    method has_window_functions (line 89) | def has_window_functions(self):
    method has_unaccent (line 92) | def has_unaccent(self):
    method has_unaccent_indexable (line 95) | def has_unaccent_indexable(self):
    method unaccent (line 98) | def unaccent(self, value):
    method has_similarity (line 101) | def has_similarity(self):
    method similarity (line 104) | def similarity(self, column, value):
    method has_search_full_text (line 107) | def has_search_full_text(self):
    method format_full_text (line 110) | def format_full_text(self, *documents, language=None):
    method format_full_text_query (line 113) | def format_full_text_query(self, query, language=None):
    method search_full_text (line 116) | def search_full_text(self, document, query):
    method rank_full_text (line 119) | def rank_full_text(self, document, query, normalize=None):
    method has_sequence (line 124) | def has_sequence(cls):
    method sequence_exist (line 127) | def sequence_exist(self, connection, name):
    method sequence_create (line 132) | def sequence_create(
    method sequence_update (line 138) | def sequence_update(
    method sequence_rename (line 144) | def sequence_rename(self, connection, old_name, new_name):
    method sequence_delete (line 149) | def sequence_delete(self, connection, name):
    method sequence_next_number (line 154) | def sequence_next_number(self, connection, name):
    method has_channel (line 159) | def has_channel(self):
    method sql_type (line 162) | def sql_type(self, type_):
    method sql_format (line 165) | def sql_format(self, type_, value):
    method json_get (line 168) | def json_get(self, column, key=None):
    method json_key_exists (line 171) | def json_key_exists(self, column, key):
    method json_any_keys_exist (line 174) | def json_any_keys_exist(self, column, keys):
    method json_all_keys_exist (line 177) | def json_all_keys_exist(self, column, keys):
    method json_contains (line 180) | def json_contains(self, column, json):

FILE: trytond/backend/postgresql/database.py
  function unescape_quote (line 52) | def unescape_quote(s):
  function replace_special_values (line 58) | def replace_special_values(s, **mapping):
  class LoggingCursor (line 64) | class LoggingCursor(cursor):
    method execute (line 65) | def execute(self, sql, args=None):
  class ForSkipLocked (line 71) | class ForSkipLocked(For):
    method __str__ (line 72) | def __str__(self):
  class Unaccent (line 77) | class Unaccent(Function):
  class Similarity (line 82) | class Similarity(Function):
  class Match (line 88) | class Match(BinaryOperator):
  class ToTsvector (line 93) | class ToTsvector(Function):
  class Setweight (line 98) | class Setweight(Function):
  class TsQuery (line 103) | class TsQuery(Function):
  class ToTsQuery (line 107) | class ToTsQuery(TsQuery):
  class PlainToTsQuery (line 112) | class PlainToTsQuery(TsQuery):
  class PhraseToTsQuery (line 117) | class PhraseToTsQuery(TsQuery):
  class WebsearchToTsQuery (line 122) | class WebsearchToTsQuery(TsQuery):
  class TsRank (line 127) | class TsRank(Function):
  class AdvisoryLock (line 132) | class AdvisoryLock(Function):
  class TryAdvisoryLock (line 136) | class TryAdvisoryLock(Function):
  class JSONBExtractPath (line 140) | class JSONBExtractPath(Function):
  class JSONKeyExists (line 145) | class JSONKeyExists(BinaryOperator):
  class _BinaryOperatorArray (line 150) | class _BinaryOperatorArray(BinaryOperator):
    method _operands (line 154) | def _operands(self):
    method params (line 160) | def params(self):
  class JSONAnyKeyExist (line 167) | class JSONAnyKeyExist(_BinaryOperatorArray):
  class JSONAllKeyExist (line 172) | class JSONAllKeyExist(_BinaryOperatorArray):
  class JSONContains (line 177) | class JSONContains(BinaryOperator):
  class Database (line 182) | class Database(DatabaseInterface):
    method __new__ (line 210) | def __new__(cls, name=_default_name):
    method __init__ (line 241) | def __init__(self, name=_default_name):
    method _connection_params (line 245) | def _connection_params(cls, name):
    method connect (line 254) | def connect(self):
    method get_connection (line 257) | def get_connection(self, autocommit=False, readonly=False):
    method put_connection (line 278) | def put_connection(self, connection, close=False):
    method close (line 281) | def close(self):
    method create (line 288) | def create(cls, connection, database_name, template='template0'):
    method drop (line 300) | def drop(cls, connection, database_name):
    method get_version (line 308) | def get_version(self, connection):
    method list (line 314) | def list(self, hostname=None):
    method init (line 348) | def init(self):
    method test (line 381) | def test(self, hostname=None):
    method _test (line 393) | def _test(cls, connection, hostname=None):
    method nextid (line 413) | def nextid(self, connection, table):
    method setnextid (line 418) | def setnextid(self, connection, table, value):
    method currid (line 422) | def currid(self, connection, table):
    method lock (line 428) | def lock(self, connection, table):
    method lock_id (line 433) | def lock_id(self, id, timeout=None):
    method has_constraint (line 439) | def has_constraint(self, constraint):
    method has_multirow_insert (line 442) | def has_multirow_insert(self):
    method get_table_schema (line 445) | def get_table_schema(self, connection, table_name):
    method current_user (line 456) | def current_user(self):
    method search_path (line 468) | def search_path(self):
    method has_returning (line 486) | def has_returning(self):
    method has_select_for (line 496) | def has_select_for(self):
    method get_select_for_skip_locked (line 499) | def get_select_for_skip_locked(self):
    method has_window_functions (line 513) | def has_window_functions(self):
    method has_sequence (line 517) | def has_sequence(cls):
    method has_proc (line 520) | def has_proc(self, name, property='oid'):
    method has_unaccent (line 539) | def has_unaccent(self):
    method has_unaccent_indexable (line 542) | def has_unaccent_indexable(self):
    method has_similarity (line 545) | def has_similarity(self):
    method similarity (line 548) | def similarity(self, column, value):
    method has_search_full_text (line 551) | def has_search_full_text(self):
    method _search_full_text_language (line 554) | def _search_full_text_language(self, language):
    method format_full_text (line 573) | def format_full_text(self, *documents, language=None):
    method format_full_text_query (line 600) | def format_full_text_query(self, query, language=None):
    method search_full_text (line 618) | def search_full_text(self, document, query):
    method rank_full_text (line 621) | def rank_full_text(self, document, query, normalize=None):
    method sql_type (line 637) | def sql_type(self, type_):
    method sql_format (line 644) | def sql_format(self, type_, value):
    method unaccent (line 650) | def unaccent(self, value):
    method sequence_exist (line 655) | def sequence_exist(self, connection, name):
    method sequence_create (line 666) | def sequence_create(
    method sequence_update (line 675) | def sequence_update(
    method sequence_rename (line 683) | def sequence_rename(self, connection, old_name, new_name):
    method sequence_delete (line 692) | def sequence_delete(self, connection, name):
    method sequence_next_number (line 697) | def sequence_next_number(self, connection, name):
    method has_channel (line 723) | def has_channel(self):
    method has_extension (line 726) | def has_extension(self, extension_name):
    method json_get (line 743) | def json_get(self, column, key=None):
    method json_key_exists (line 749) | def json_key_exists(self, column, key):
    method json_any_keys_exist (line 752) | def json_any_keys_exist(self, column, keys):
    method json_all_keys_exist (line 755) | def json_all_keys_exist(self, column, keys):
    method json_contains (line 758) | def json_contains(self, column, json):
  function convert_json (line 775) | def convert_json(value):

FILE: trytond/backend/postgresql/init.sql
  type ir_configuration (line 3) | CREATE TABLE ir_configuration (
  type ir_model (line 12) | CREATE TABLE ir_model (
  type ir_model_field (line 23) | CREATE TABLE ir_model_field (
  type ir_ui_view (line 39) | CREATE TABLE ir_ui_view (
  type ir_ui_menu (line 51) | CREATE TABLE ir_ui_menu (
  type ir_translation (line 62) | CREATE TABLE ir_translation (
  type ir_lang (line 77) | CREATE TABLE ir_lang (
  type res_user (line 90) | CREATE TABLE res_user (
  type res_group (line 105) | CREATE TABLE res_group (
  type "res_user-res_group" (line 113) | CREATE TABLE "res_user-res_group" (
  type ir_module (line 124) | CREATE TABLE ir_module (
  type ir_module_dependency (line 141) | CREATE TABLE ir_module_dependency (
  type ir_cache (line 157) | CREATE TABLE ir_cache (

FILE: trytond/backend/postgresql/table.py
  class TableHandler (line 18) | class TableHandler(TableHandlerInterface):
    method _init (line 22) | def _init(self, model, history=False):
    method table_exist (line 100) | def table_exist(cls, table_name):
    method table_rename (line 106) | def table_rename(cls, old_name, new_name):
    method column_exist (line 127) | def column_exist(self, column_name):
    method column_rename (line 130) | def column_rename(self, old_name, new_name):
    method _columns (line 146) | def _columns(self):
    method _constraints (line 168) | def _constraints(self):
    method _fk_deltypes (line 194) | def _fk_deltypes(self):
    method _indexes (line 208) | def _indexes(self):
    method _update_definitions (line 223) | def _update_definitions(self, columns=True, constraints=True):
    method alter_size (line 230) | def alter_size(self, column_name, column_type):
    method alter_type (line 239) | def alter_type(self, column_name, column_type):
    method column_is_type (line 247) | def column_is_type(self, column_name, type_, *, size=-1):
    method db_default (line 259) | def db_default(self, column_name, value):
    method add_column (line 273) | def add_column(self, column_name, sql_type, default=None, comment=''):
    method add_fk (line 362) | def add_fk(self, column_name, reference, on_delete=None):
    method drop_fk (line 394) | def drop_fk(self, column_name, table=None):
    method not_null_action (line 397) | def not_null_action(self, column_name, action='add'):
    method add_constraint (line 436) | def add_constraint(self, ident, constraint):
    method drop_constraint (line 450) | def drop_constraint(self, ident, table=None):
    method set_indexes (line 460) | def set_indexes(self, indexes):
    method drop_column (line 481) | def drop_column(self, column_name):
    method drop_table (line 491) | def drop_table(cls, model, table, cascade=False):
  class IndexMixin (line 501) | class IndexMixin:
    method __init_subclass__ (line 505) | def __init_subclass__(cls):
    method definition (line 509) | def definition(cls, index):
    method _get_indexed_expressions (line 541) | def _get_indexed_expressions(cls, index):
    method _get_expression_variables (line 545) | def _get_expression_variables(cls, expression, usage):
  class HashTranslator (line 561) | class HashTranslator(IndexMixin, IndexTranslatorInterface):
    method score (line 565) | def score(cls, index):
    method _get_indexed_expressions (line 572) | def _get_indexed_expressions(cls, index):
  class BTreeTranslator (line 578) | class BTreeTranslator(IndexMixin, IndexTranslatorInterface):
    method score (line 582) | def score(cls, index):
    method _get_expressions (line 596) | def _get_expressions(cls, index):
    method _get_expression_variables (line 602) | def _get_expression_variables(cls, expression, usage):
  class TrigramTranslator (line 611) | class TrigramTranslator(IndexMixin, IndexTranslatorInterface):
    method score (line 615) | def score(cls, index):
    method _get_expressions (line 629) | def _get_expressions(cls, index):
    method _get_expression_variables (line 635) | def _get_expression_variables(cls, expression, usage):

FILE: trytond/backend/sqlite/database.py
  class DatabaseDataError (line 38) | class DatabaseDataError(DatabaseError):
  class SQLiteExtract (line 42) | class SQLiteExtract(Function):
    method extract (line 47) | def extract(lookup_type, date):
  function date_trunc (line 87) | def date_trunc(_type, date):
  function split_part (line 117) | def split_part(text, delimiter, count):
  class SQLitePosition (line 123) | class SQLitePosition(Function):
    method position (line 128) | def position(substring, string):
  function replace (line 137) | def replace(text, pattern, replacement):
  function now (line 141) | def now():
  function to_char (line 150) | def to_char(value, format):
  class SQLiteSubstring (line 194) | class SQLiteSubstring(Function):
  class SQLiteOverlay (line 199) | class SQLiteOverlay(Function):
    method overlay (line 204) | def overlay(string, placing_string, from_, for_=None):
  class SQLiteCharLength (line 210) | class SQLiteCharLength(Function):
  class SQLiteCurrentTimestamp (line 215) | class SQLiteCurrentTimestamp(Function):
  class SQLiteTrim (line 220) | class SQLiteTrim(Trim):
    method __str__ (line 222) | def __str__(self):
    method params (line 241) | def params(self):
  function sign (line 250) | def sign(value):
  function greatest (line 259) | def greatest(*args):
  function least (line 267) | def least(*args):
  function bool_and (line 275) | def bool_and(*args):
  function bool_or (line 279) | def bool_or(*args):
  function cbrt (line 283) | def cbrt(value):
  function div (line 287) | def div(a, b):
  function trunc (line 291) | def trunc(value, digits):
  class JSONExtract (line 306) | class JSONExtract(Function):
  class JSONQuote (line 311) | class JSONQuote(Function):
  class SQLiteCursor (line 316) | class SQLiteCursor(sqlite.Cursor):
    method __enter__ (line 318) | def __enter__(self):
    method __exit__ (line 321) | def __exit__(self, type, value, traceback):
  class SQLiteConnection (line 325) | class SQLiteConnection(sqlite.Connection):
    method cursor (line 327) | def cursor(self):
  class Database (line 331) | class Database(DatabaseInterface):
    method __new__ (line 348) | def __new__(cls, name=_default_name):
    method __init__ (line 354) | def __init__(self, name=_default_name):
    method connect (line 359) | def connect(self):
    method _make_uri (line 422) | def _make_uri(self):
    method get_connection (line 446) | def get_connection(self, autocommit=False, readonly=False):
    method put_connection (line 455) | def put_connection(self, connection=None, close=False):
    method close (line 458) | def close(self):
    method create (line 466) | def create(cls, connection, database_name):
    method drop (line 479) | def drop(cls, connection, database_name):
    method list (line 488) | def list(self, hostname=None):
    method init (line 512) | def init(self):
    method test (line 548) | def test(self, hostname=None):
    method lastid (line 577) | def lastid(self, cursor):
    method lock (line 581) | def lock(self, connection, table):
    method lock_id (line 584) | def lock_id(self, id, timeout=None):
    method has_constraint (line 587) | def has_constraint(self, constraint):
    method has_multirow_insert (line 590) | def has_multirow_insert(self):
    method has_window_functions (line 593) | def has_window_functions(self):
    method sql_type (line 596) | def sql_type(self, type_):
    method sql_format (line 603) | def sql_format(self, type_, value):
    method json_get (line 610) | def json_get(self, column, key=None):
  function adapt_datetime (line 620) | def adapt_datetime(val):
  function convert_interval (line 631) | def convert_interval(value):

FILE: trytond/backend/sqlite/init.sql
  type ir_configuration (line 1) | CREATE TABLE ir_configuration (
  type ir_model (line 7) | CREATE TABLE ir_model (
  type ir_model_field (line 15) | CREATE TABLE ir_model_field (
  type ir_ui_view (line 28) | CREATE TABLE ir_ui_view (
  type ir_ui_menu (line 37) | CREATE TABLE ir_ui_menu (
  type ir_translation (line 44) | CREATE TABLE ir_translation (
  type ir_lang (line 56) | CREATE TABLE ir_lang (
  type res_user (line 66) | CREATE TABLE res_user (
  type res_group (line 76) | CREATE TABLE res_group (
  type "res_user-res_group" (line 81) | CREATE TABLE "res_user-res_group" (
  type ir_module (line 87) | CREATE TABLE ir_module (
  type ir_module_dependency (line 97) | CREATE TABLE ir_module_dependency (
  type ir_cache (line 107) | CREATE TABLE ir_cache (

FILE: trytond/backend/sqlite/table.py
  function _escape_identifier (line 21) | def _escape_identifier(name):
  class TableHandler (line 25) | class TableHandler(TableHandlerInterface):
    method _init (line 29) | def _init(self, model, history=False):
    method table_exist (line 50) | def table_exist(cls, table_name):
    method table_rename (line 86) | def table_rename(cls, old_name, new_name):
    method column_exist (line 101) | def column_exist(self, column_name):
    method _recreate_table (line 104) | def _recreate_table(self, update_columns=None, drop_columns=None):
    method column_rename (line 138) | def column_rename(self, old_name, new_name):
    method _columns (line 156) | def _columns(self):
    method _indexes (line 179) | def _indexes(self):
    method _update_definitions (line 189) | def _update_definitions(self, columns=True):
    method alter_size (line 193) | def alter_size(self, column_name, column_type):
    method alter_type (line 196) | def alter_type(self, column_name, column_type):
    method column_is_type (line 199) | def column_is_type(self, column_name, type_, *, size=-1):
    method db_default (line 211) | def db_default(self, column_name, value):
    method add_column (line 214) | def add_column(self, column_name, sql_type, default=None, comment=''):
    method _add_raw_column (line 223) | def _add_raw_column(self, column_name, column_type, default=None,
    method add_fk (line 283) | def add_fk(self, column_name, reference, on_delete=None):
    method drop_fk (line 286) | def drop_fk(self, column_name, table=None):
    method not_null_action (line 289) | def not_null_action(self, column_name, action='add'):
    method add_constraint (line 300) | def add_constraint(self, ident, constraint):
    method drop_constraint (line 303) | def drop_constraint(self, ident, table=None):
    method set_indexes (line 306) | def set_indexes(self, indexes):
    method drop_column (line 331) | def drop_column(self, column_name):
    method drop_table (line 345) | def drop_table(cls, model, table, cascade=False):
  class IndexMixin (line 356) | class IndexMixin:
    method __init_subclass__ (line 358) | def __init_subclass__(cls):
    method definition (line 362) | def definition(cls, index):
    method _get_expression_variables (line 384) | def _get_expression_variables(cls, expression, usage):
  class IndexTranslator (line 401) | class IndexTranslator(IndexMixin, IndexTranslatorInterface):
    method score (line 404) | def score(cls, index):

FILE: trytond/backend/table.py
  class TableHandlerInterface (line 9) | class TableHandlerInterface(object):
    method __new__ (line 17) | def __new__(cls, model, history=False):
    method _init (line 26) | def _init(self, model, history=False):
    method table_exist (line 45) | def table_exist(cls, table_name):
    method table_rename (line 49) | def table_rename(cls, old_name, new_name):
    method column_exist (line 52) | def column_exist(self, column_name):
    method column_rename (line 55) | def column_rename(self, old_name, new_name):
    method alter_size (line 58) | def alter_size(self, column_name, column_type):
    method alter_type (line 61) | def alter_type(self, column_name, column_type):
    method column_is_type (line 64) | def column_is_type(self, column_name, type_, *, size=-1):
    method db_default (line 67) | def db_default(self, column_name, value):
    method add_column (line 70) | def add_column(self, column_name, abstract_type, default=None, comment...
    method add_fk (line 73) | def add_fk(self, column_name, reference, on_delete=None):
    method drop_fk (line 76) | def drop_fk(self, column_name, table=None):
    method not_null_action (line 79) | def not_null_action(self, column_name, action='add'):
    method add_constraint (line 82) | def add_constraint(self, ident, constraint):
    method drop_constraint (line 85) | def drop_constraint(self, ident, table=None):
    method create_index (line 88) | def create_index(self, index):
    method drop_column (line 91) | def drop_column(self, column_name):
    method drop_table (line 95) | def drop_table(cls, model, table, cascade=False):
    method convert_name (line 99) | def convert_name(cls, name, reserved=0):
    method index_translator_for (line 110) | def index_translator_for(self, index):
  class IndexTranslatorInterface (line 120) | class IndexTranslatorInterface:
    method _get_name (line 123) | def _get_name(cls, query, params):
    method definition (line 132) | def definition(cls, index):
    method score (line 136) | def score(cls, index):

FILE: trytond/bus.py
  class _MessageQueue (line 43) | class _MessageQueue:
    method __init__ (line 47) | def __init__(self, timeout):
    method append (line 53) | def append(self, channel, element):
    method get_next (line 57) | def get_next(self, channels, from_id=None):
  class LongPollingBus (line 85) | class LongPollingBus:
    method subscribe (line 94) | def subscribe(cls, database, channels, last_message=None):
    method create_response (line 138) | def create_response(cls, channel, message):
    method _listen (line 147) | def _listen(cls, database):
    method publish (line 205) | def publish(cls, channel, message):
  function subscribe (line 228) | def subscribe(request, database_name):
  function notify (line 258) | def notify(title, body=None, priority=1, user=None, client=None):

FILE: trytond/cache.py
  function _cast (line 28) | def _cast(column):
  function freeze (line 38) | def freeze(o):
  function unfreeze (line 47) | def unfreeze(o):
  function _get_modules (line 56) | def _get_modules(cursor):
  class BaseCache (line 65) | class BaseCache(object):
    method __init__ (line 68) | def __init__(self, name, size_limit=1024, duration=None, context=True):
    method stats (line 85) | def stats(cls):
    method _key (line 93) | def _key(self, key):
    method get (line 103) | def get(self, key, default=None):
    method set (line 106) | def set(self, key, value):
    method clear (line 109) | def clear(self):
    method clear_all (line 113) | def clear_all(cls):
    method sync (line 118) | def sync(cls, transaction):
    method sync_since (line 121) | def sync_since(self, value):
    method commit (line 125) | def commit(cls, transaction):
    method rollback (line 129) | def rollback(cls, transaction):
    method drop (line 133) | def drop(cls, dbname):
  class MemoryCache (line 137) | class MemoryCache(BaseCache):
    method __init__ (line 149) | def __init__(self, *args, **kwargs):
    method _get_cache (line 156) | def _get_cache(self):
    method get (line 171) | def get(self, key, default=None):
    method set (line 186) | def set(self, key, value):
    method clear (line 199) | def clear(self):
    method _clear (line 204) | def _clear(self, dbname, timestamp=None):
    method _clear_all (line 213) | def _clear_all(cls, dbname):
    method sync (line 218) | def sync(cls, transaction):
    method sync_since (line 258) | def sync_since(self, value):
    method commit (line 262) | def commit(cls, transaction):
    method rollback (line 316) | def rollback(cls, transaction):
    method drop (line 320) | def drop(cls, dbname):
    method refresh_pool (line 340) | def refresh_pool(cls, transaction):
    method _listen (line 355) | def _listen(cls, dbname):
  class LRUDict (line 412) | class LRUDict(OrderedDict):
    method __init__ (line 423) | def __init__(self, size_limit,
    method __setitem__ (line 433) | def __setitem__(self, key, value):
    method __missing__ (line 437) | def __missing__(self, key):
    method update (line 447) | def update(self, *args, **kwargs):
    method setdefault (line 451) | def setdefault(self, key, default=None):
    method _check_size_limit (line 456) | def _check_size_limit(self):
  class LRUDictTransaction (line 461) | class LRUDictTransaction(LRUDict):
    method __init__ (line 468) | def __init__(self, *args, **kwargs):
    method clear (line 473) | def clear(self):
    method refresh (line 477) | def refresh(self):

FILE: trytond/commandline.py
  function database_completer (line 18) | def database_completer(parsed_args, **kwargs):
  function module_completer (line 27) | def module_completer(**kwargs):
  function language_completer (line 32) | def language_completer(**kwargs):
  function get_base_parser (line 37) | def get_base_parser():
  function get_parser (line 47) | def get_parser():
  function get_parser_daemon (line 70) | def get_parser_daemon():
  function get_parser_worker (line 79) | def get_parser_worker():
  function get_parser_cron (line 92) | def get_parser_cron():
  function get_parser_admin (line 99) | def get_parser_admin():
  function get_parser_console (line 143) | def get_parser_console():
  function get_parser_stat (line 155) | def get_parser_stat():
  function config_log (line 161) | def config_log(options):
  function pidfile (line 176) | def pidfile(options):

FILE: trytond/config.py
  function get_hostname (line 22) | def get_hostname(netloc):
  function get_port (line 31) | def get_port(netloc):
  function split_netloc (line 36) | def split_netloc(netloc):
  function parse_listen (line 40) | def parse_listen(value):
  function parse_uri (line 45) | def parse_uri(uri):
  class TrytonConfigParser (line 49) | class TrytonConfigParser(configparser.ConfigParser):
    method __init__ (line 51) | def __init__(self):
    method update_environ (line 101) | def update_environ(self):
    method update_etc (line 115) | def update_etc(self, configfile=os.environ.get('TRYTOND_CONFIG')):
    method get (line 128) | def get(self, section, option, *args, **kwargs):
    method getint (line 136) | def getint(self, section, option, *args, **kwargs):
    method getfloat (line 145) | def getfloat(self, section, option, *args, **kwargs):
    method getboolean (line 154) | def getboolean(self, section, option, *args, **kwargs):

FILE: trytond/console.py
  class Console (line 16) | class Console(InteractiveConsole):
    method __init__ (line 17) | def __init__(self, locals=None, filename="<console>", histsize=-1,
    method init_completer (line 23) | def init_completer(selfi, locals):
    method init_history (line 28) | def init_history(self, histfile, histsize):
    method save_history (line 37) | def save_history(self, histfile, histsize):
  function run (line 42) | def run(options):

FILE: trytond/convert.py
  class ParsingError (line 22) | class ParsingError(Exception):
  class DummyTagHandler (line 26) | class DummyTagHandler:
    method __init__ (line 30) | def __init__(self):
    method startElement (line 33) | def startElement(self, name, attributes):
    method characters (line 36) | def characters(self, data):
    method endElement (line 39) | def endElement(self, name):
  class MenuitemTagHandler (line 43) | class MenuitemTagHandler:
    method __init__ (line 45) | def __init__(self, master_handler):
    method startElement (line 49) | def startElement(self, name, attributes):
    method characters (line 162) | def characters(self, data):
    method endElement (line 165) | def endElement(self, name):
    method current_state (line 173) | def current_state(self):
  class RecordTagHandler (line 177) | class RecordTagHandler:
    method __init__ (line 181) | def __init__(self, master_handler):
    method startElement (line 194) | def startElement(self, name, attributes):
    method characters (line 280) | def characters(self, data):
    method endElement (line 293) | def endElement(self, name):
    method current_state (line 321) | def current_state(self):
  class Fs2bdAccessor (line 325) | class Fs2bdAccessor:
    method __init__ (line 331) | def __init__(self, ModelData, pool):
    method get (line 338) | def get(self, module, fs_id):
    method exists (line 343) | def exists(self, module, fs_id):
    method get_browserecord (line 348) | def get_browserecord(self, module, model_name, db_id):
    method set (line 356) | def set(self, module, fs_id, values):
    method reset_browsercord (line 369) | def reset_browsercord(self, module, model_name, ids=None):
    method fetch_new_module (line 384) | def fetch_new_module(self, module):
  class TrytondXmlHandler (line 418) | class TrytondXmlHandler(sax.handler.ContentHandler):
    method __init__ (line 420) | def __init__(self, pool, module, module_state, modules, languages):
    method parse_xmlstream (line 455) | def parse_xmlstream(self, stream):
    method startElement (line 469) | def startElement(self, name, attributes):
    method characters (line 498) | def characters(self, data):
    method endElement (line 502) | def endElement(self, name):
    method current_state (line 523) | def current_state(self):
    method get_id (line 529) | def get_id(self, xml_id):
    method _clean_value (line 542) | def _clean_value(key, record):
    method populate_to_delete (line 565) | def populate_to_delete(self):
    method import_record (line 577) | def import_record(self, model, values, fs_id):
    method create_records (line 697) | def create_records(self, model, vlist, fs_ids):
    method write_records (line 731) | def write_records(self, module, model,
  function post_import (line 786) | def post_import(pool, module, to_delete):

FILE: trytond/cron.py
  function run (line 14) | def run(options):

FILE: trytond/exceptions.py
  class TrytonException (line 5) | class TrytonException(Exception):
  class UserError (line 9) | class UserError(TrytonException):
    method __init__ (line 11) | def __init__(self, message, description='', domain=None):
    method __str__ (line 18) | def __str__(self):
  class UserWarning (line 22) | class UserWarning(TrytonException):
    method __init__ (line 25) | def __init__(self, name, message, description=''):
    method __str__ (line 33) | def __str__(self):
  class LoginException (line 37) | class LoginException(TrytonException):
    method __init__ (line 42) | def __init__(self, name, message, type='password'):
  class ConcurrencyException (line 51) | class ConcurrencyException(TrytonException):
    method __init__ (line 53) | def __init__(self, message):
    method __str__ (line 59) | def __str__(self):
  class RateLimitException (line 63) | class RateLimitException(TrytonException):
  class MissingDependenciesException (line 67) | class MissingDependenciesException(TrytonException):
    method __init__ (line 69) | def __init__(self, missings):
    method __str__ (line 72) | def __str__(self):

FILE: trytond/filestore.py
  class FileStore (line 12) | class FileStore(object):
    method get (line 14) | def get(self, id, prefix=''):
    method getmany (line 19) | def getmany(self, ids, prefix=''):
    method size (line 22) | def size(self, id, prefix=''):
    method sizemany (line 27) | def sizemany(self, ids, prefix=''):
    method set (line 30) | def set(self, data, prefix=''):
    method setmany (line 51) | def setmany(self, data, prefix=''):
    method _filename (line 54) | def _filename(self, id, prefix):
    method _id (line 62) | def _id(self, data):

FILE: trytond/i18n.py
  function gettext (line 8) | def gettext(message_id, *args, **variables):
  function lazy_gettext (line 31) | def lazy_gettext(message_id, *args, **variables):

FILE: trytond/ir/__init__.py
  function register (line 13) | def register():

FILE: trytond/ir/action.py
  class WizardModelError (line 29) | class WizardModelError(ValidationError):
  class EmailError (line 33) | class EmailError(ValidationError):
  class ViewError (line 37) | class ViewError(ValidationError):
  class DomainError (line 41) | class DomainError(ValidationError):
  class ContextError (line 45) | class ContextError(ValidationError):
  class Action (line 52) | class Action(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 68) | def __setup__(cls):
    method default_records (line 75) | def default_records(cls):
    method default_usage (line 79) | def default_usage():
    method write (line 83) | def write(cls, actions, values, *args):
    method get_action_id (line 89) | def get_action_id(cls, action_id):
    method get_action_values (line 111) | def get_action_values(cls, type_, action_ids, columns=None):
    method get_action_value (line 138) | def get_action_value(self):
  class ActionKeyword (line 143) | class ActionKeyword(ModelSQL, ModelView):
    method __setup__ (line 159) | def __setup__(cls):
    method validate_fields (line 173) | def validate_fields(cls, actions, field_names):
    method check_wizard_model (line 178) | def check_wizard_model(cls, actions, field_names=None):
    method _convert_vals (line 199) | def _convert_vals(vals):
    method models_get (line 208) | def models_get():
    method delete (line 214) | def delete(cls, keywords):
    method create (line 221) | def create(cls, vlist):
    method write (line 231) | def write(cls, keywords, values, *args):
    method get_keyword (line 242) | def get_keyword(cls, keyword, value):
  class ActionMixin (line 301) | class ActionMixin(ModelSQL):
    method __setup__ (line 306) | def __setup__(cls):
    method _default_action (line 322) | def _default_action(name):
    method get_action (line 328) | def get_action(cls, ids, names):
    method set_action (line 354) | def set_action(cls, records, name, value):
    method search_action (line 362) | def search_action(cls, name, clause):
    method create (line 366) | def create(cls, vlist):
    method write (line 409) | def write(cls, records, values, *args):
    method delete (line 418) | def delete(cls, records):
    method copy (line 428) | def copy(cls, records, default=None):
    method fetch_action (line 442) | def fetch_action(cls, action_id):
  class ActionReport (line 448) | class ActionReport(ActionMixin, ModelSQL, ModelView):
    method __register__ (line 568) | def __register__(cls, module_name):
    method default_type (line 586) | def default_type():
    method default_report_content (line 590) | def default_report_content():
    method default_direct_print (line 594) | def default_direct_print():
    method default_single (line 598) | def default_single(cls):
    method default_translatable (line 602) | def default_translatable(cls):
    method default_template_extension (line 606) | def default_template_extension():
    method default_extension (line 610) | def default_extension():
    method default_module (line 614) | def default_module():
    method get_is_custom (line 617) | def get_is_custom(self, name):
    method get_report_content (line 621) | def get_report_content(cls, reports, name):
    method set_report_content (line 644) | def set_report_content(cls, records, name, value):
    method get_report_content_html (line 648) | def get_report_content_html(cls, reports, name):
    method set_report_content_html (line 652) | def set_report_content_html(cls, reports, name, value):
    method on_change_with_report_content_name (line 658) | def on_change_with_report_content_name(self, name=None):
    method get_pyson (line 663) | def get_pyson(cls, reports, name):
    method copy (line 673) | def copy(cls, reports, default=None):
    method write (line 690) | def write(cls, reports, values, *args):
    method get_template_cached (line 704) | def get_template_cached(self):
    method set_template_cached (line 707) | def set_template_cached(self, template):
    method validate_fields (line 711) | def validate_fields(cls, reports, field_names):
    method check_record_name (line 716) | def check_record_name(cls, reports, field_names=None):
  class ActionActWindow (line 731) | class ActionActWindow(ActionMixin, ModelSQL, ModelView):
    method __setup__ (line 761) | def __setup__(cls):
    method __register__ (line 768) | def __register__(cls, module_name):
    method default_type (line 788) | def default_type():
    method default_context (line 792) | def default_context():
    method default_search_value (line 796) | def default_search_value():
    method validate (line 800) | def validate(cls, actions):
    method validate_fields (line 805) | def validate_fields(cls, actions, field_names):
    method check_views (line 811) | def check_views(cls, actions):
    method check_domain (line 842) | def check_domain(cls, actions, field_names=None):
    method check_context (line 878) | def check_context(cls, actions, field_names=None):
    method get_views (line 911) | def get_views(self, name):
    method get_domains (line 915) | def get_domains(self, name):
    method get_pyson (line 920) | def get_pyson(cls, windows, name):
    method get (line 942) | def get(cls, xml_id):
  class ActionActWindowView (line 954) | class ActionActWindowView(
    method __register__ (line 964) | def __register__(cls, module_name):
    method create (line 973) | def create(cls, vlist):
    method write (line 980) | def write(cls, windows, values, *args):
    method delete (line 986) | def delete(cls, windows):
  class ActionActWindowDomain (line 992) | class ActionActWindowDomain(
    method __register__ (line 1003) | def __register__(cls, module_name):
    method default_count (line 1012) | def default_count(cls):
    method validate_fields (line 1016) | def validate_fields(cls, actions, field_names):
    method check_domain (line 1021) | def check_domain(cls, actions, field_names=None):
    method create (line 1055) | def create(cls, vlist):
    method write (line 1062) | def write(cls, domains, values, *args):
    method delete (line 1068) | def delete(cls, domains):
  class ActionWizard (line 1074) | class ActionWizard(ActionMixin, ModelSQL, ModelView):
    method default_type (line 1085) | def default_type():
    method get_models (line 1089) | def get_models(cls, name, action_id=None):
  class ActionURL (line 1100) | class ActionURL(ActionMixin, ModelSQL, ModelView):
    method default_type (line 1108) | def default_type():

FILE: trytond/ir/attachment.py
  class Attachment (line 27) | class Attachment(ResourceMixin, ModelSQL, ModelView):
    method __setup__ (line 51) | def __setup__(cls):
    method __register__ (line 59) | def __register__(cls, module_name):
    method default_type (line 87) | def default_type():
    method get_size (line 90) | def get_size(self, name):
    method on_change_with_summary (line 98) | def on_change_with_summary(self, name=None):
    method fields_view_get (line 102) | def fields_view_get(cls, view_id=None, view_type='form', level=None):
  class AttachmentCopyMixin (line 113) | class AttachmentCopyMixin(

FILE: trytond/ir/avatar.py
  class ImageMixin (line 34) | class ImageMixin:
  class Avatar (line 41) | class Avatar(ImageMixin, ResourceMixin, ModelSQL):
    method __setup__ (line 49) | def __setup__(cls):
    method default_uuid (line 58) | def default_uuid(cls):
    method create (line 62) | def create(cls, vlist):
    method write (line 69) | def write(cls, *args):
    method copy (line 75) | def copy(cls, avatars, default=None):
    method url (line 85) | def url(self):
    method get (line 94) | def get(self, size=64):
    method convert (line 117) | def convert(cls, image, **_params):
    method _resize (line 136) | def _resize(self, size=64, **_params):
    method _store_cache (line 145) | def _store_cache(self, size, image):
    method clear_cache (line 154) | def clear_cache(cls, avatars):
  class AvatarCache (line 161) | class AvatarCache(ImageMixin, ModelSQL):
    method __setup__ (line 175) | def __setup__(cls):
  function generate (line 185) | def generate(size, string):

FILE: trytond/ir/cache.py
  class Cache (line 6) | class Cache(ModelSQL):

FILE: trytond/ir/calendar_.py
  class _Calendar (line 10) | class _Calendar(ModelSQL):
    method __setup__ (line 17) | def __setup__(cls):
    method locale (line 37) | def locale(cls, language=None, field='name'):
  class Month (line 54) | class Month(_Calendar):
  class Day (line 62) | class Day(_Calendar):

FILE: trytond/ir/configuration.py
  class Configuration (line 8) | class Configuration(ModelSingleton, ModelSQL):
    method default_language (line 16) | def default_language():
    method get_language (line 20) | def get_language(cls):
    method check (line 30) | def check(self):
    method create (line 35) | def create(cls, vlist):
    method write (line 41) | def write(cls, *args):
    method delete (line 46) | def delete(cls, records):

FILE: trytond/ir/cron.py
  class Cron (line 24) | class Cron(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 80) | def __setup__(cls):
    method __register__ (line 92) | def __register__(cls, module_name):
    method get_timezone (line 105) | def get_timezone(self, name):
    method check_xml_record (line 109) | def check_xml_record(crons, values):
    method view_attributes (line 113) | def view_attributes(cls):
    method compute_next_call (line 120) | def compute_next_call(self, now):
    method run_once (line 147) | def run_once(cls, crons):
    method run (line 155) | def run(cls, db_name):

FILE: trytond/ir/date.py
  class Date (line 9) | class Date(Model):
    method __setup__ (line 14) | def __setup__(cls):
    method today (line 21) | def today(timezone=None):

FILE: trytond/ir/email_.py
  class EmailTemplateError (line 47) | class EmailTemplateError(ValidationError):
  function _get_emails (line 51) | def _get_emails(value):
  function _formataddr (line 56) | def _formataddr(pair):
  class Email (line 69) | class Email(ResourceAccessMixin, ModelSQL, ModelView):
    method __setup__ (line 84) | def __setup__(cls):
    method get_user (line 93) | def get_user(self, name):
    method get_at (line 96) | def get_at(self, name):
    method send (line 100) | def send(cls, to='', cc='', bcc='', subject='', body='',
    method complete (line 198) | def complete(cls, text, limit):
    method _match (line 227) | def _match(cls, name, email):
  class EmailAddress (line 243) | class EmailAddress(ModelSQL):
  class EmailTemplate (line 252) | class EmailTemplate(ModelSQL, ModelView):
    method __setup__ (line 317) | def __setup__(cls):
    method on_change_with_model_name (line 342) | def on_change_with_model_name(self, name=None):
    method validate_fields (line 347) | def validate_fields(cls, templates, field_names):
    method check_subject (line 354) | def check_subject(cls, templates, field_names=None):
    method check_body (line 369) | def check_body(self, templates, field_names=None):
    method check_fields_pyson (line 384) | def check_fields_pyson(cls, templates, field_names=None):
    method get (line 415) | def get(self, record):
    method get_context (line 462) | def get_context(self, record):
    method eval (line 476) | def eval(self, record, pyson, _env=None):
    method _get_default_exclude (line 487) | def _get_default_exclude(cls, record):
    method get_default (line 491) | def get_default(cls, model, record):
    method email_models (line 529) | def email_models(cls):
    method get_addresses (line 533) | def get_addresses(cls, value):
    method _get_address (line 544) | def _get_address(cls, record):
    method get_languages (line 553) | def get_languages(cls, value):
    method _get_language (line 569) | def _get_language(cls, record):
  class EmailTemplate_Report (line 576) | class EmailTemplate_Report(ModelSQL):

FILE: trytond/ir/error.py
  function set_user (line 19) | def set_user(field):
  function reset_user (line 34) | def reset_user(*fields):
  class Error (line 45) | class Error(Workflow, ModelView, ModelSQL):
    method __setup__ (line 78) | def __setup__(cls):
    method default_state (line 108) | def default_state(cls):
    method on_change_with_summary (line 112) | def on_change_with_summary(self, name=None):
    method get_rec_name (line 115) | def get_rec_name(self, name):
    method log (line 121) | def log(cls, origin, exception):
    method clean (line 142) | def clean(cls, date=None):
    method open (line 153) | def open(cls, errors):
    method process (line 160) | def process(cls, errors):
    method solve (line 167) | def solve(cls, errors):

FILE: trytond/ir/export.py
  class _ClearCache (line 9) | class _ClearCache(ModelSQL):
    method create (line 11) | def create(cls, vlist):
    method write (line 16) | def write(cls, *args):
    method delete (line 21) | def delete(cls, records):
  class Export (line 26) | class Export(_ClearCache, ModelSQL, ModelView):
    method __setup__ (line 38) | def __setup__(cls):
    method default_header (line 44) | def default_header(cls):
    method update (line 48) | def update(cls, exports, fields):
  class ExportLine (line 60) | class ExportLine(_ClearCache, ModelSQL, ModelView):

FILE: trytond/ir/lang.py
  class GroupingError (line 25) | class GroupingError(UserError):
  class DateError (line 29) | class DateError(UserError):
  class TranslatableError (line 33) | class TranslatableError(UserError):
  class DeleteDefaultError (line 37) | class DeleteDefaultError(UserError):
  class Lang (line 41) | class Lang(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 86) | def __setup__(cls):
    method search_rec_name (line 105) | def search_rec_name(cls, name, clause):
    method read (line 113) | def read(cls, ids, fields_names):
    method default_translatable (line 135) | def default_translatable():
    method default_direction (line 139) | def default_direction():
    method default_date (line 143) | def default_date():
    method default_grouping (line 147) | def default_grouping():
    method default_decimal_point (line 151) | def default_decimal_point():
    method default_thousands_sep (line 155) | def default_thousands_sep():
    method default_mon_grouping (line 159) | def default_mon_grouping(cls):
    method default_mon_thousands_sep (line 163) | def default_mon_thousands_sep(cls):
    method default_mon_decimal_point (line 167) | def default_mon_decimal_point(cls):
    method default_p_sign_posn (line 171) | def default_p_sign_posn(cls):
    method default_n_sign_posn (line 175) | def default_n_sign_posn(cls):
    method default_negative_sign (line 179) | def default_negative_sign(cls):
    method default_positive_sign (line 183) | def default_positive_sign(cls):
    method default_p_cs_precedes (line 187) | def default_p_cs_precedes(cls):
    method default_n_cs_precedes (line 191) | def default_n_cs_precedes(cls):
    method default_p_sep_by_space (line 195) | def default_p_sep_by_space(cls):
    method default_n_sep_by_space (line 199) | def default_n_sep_by_space(cls):
    method load_translations (line 204) | def load_translations(cls, languages):
    method unload_translations (line 223) | def unload_translations(cls, languages):
    method validate_fields (line 234) | def validate_fields(cls, languages, field_names):
    method check_grouping (line 241) | def check_grouping(cls, langs, fields_names=None):
    method check_date (line 261) | def check_date(cls, langs, field_names=None):
    method check_translatable (line 294) | def check_translatable(cls, langs, field_names=None):
    method check_xml_record (line 311) | def check_xml_record(langs, values):
    method get_translatable_languages (line 315) | def get_translatable_languages(cls):
    method create (line 326) | def create(cls, vlist):
    method write (line 337) | def write(cls, langs, values, *args):
    method delete (line 348) | def delete(cls, langs):
    method get (line 365) | def get(cls, code=None):
    method _group (line 380) | def _group(self, s, monetary=False):
    method format (line 429) | def format(self, percent, value, grouping=False, monetary=False,
    method currency (line 478) | def currency(
    method strftime (line 530) | def strftime(self, value, format=None):
    method format_number (line 563) | def format_number(self, value, digits=None, grouping=True, monetary=No...
    method format_number_symbol (line 572) | def format_number_symbol(self, value, symbol, digits=None, grouping=Tr...
  class LangConfigStart (line 584) | class LangConfigStart(ModelView):
    method default_languages (line 591) | def default_languages(cls):
  class LangConfig (line 597) | class LangConfig(Wizard):
    method transition_load (line 608) | def transition_load(self):
  function get_parent_language (line 620) | def get_parent_language(code):

FILE: trytond/ir/message.py
  class Message (line 10) | class Message(ModelSQL, ModelView):
    method gettext (line 18) | def gettext(cls, *args, **variables):
    method write (line 35) | def write(cls, messages, values, *args):
    method delete (line 40) | def delete(cls, messages):
    method search_rec_name (line 45) | def search_rec_name(cls, name, clause):

FILE: trytond/ir/model.py
  class ConditionError (line 34) | class ConditionError(ValidationError):
  class Model (line 38) | class Model(ModelSQL, ModelView):
    method __setup__ (line 65) | def __setup__(cls):
    method register (line 82) | def register(cls, model, module_name):
    method clean (line 114) | def clean(cls):
    method list_models (line 134) | def list_models(cls):
    method list_history (line 144) | def list_history(cls):
    method get_notification (line 150) | def get_notification(cls):
    method get_name_items (line 159) | def get_name_items(cls):
    method get_names (line 169) | def get_names(cls):
    method global_search (line 178) | def global_search(cls, text, limit, menu='ir.ui.menu'):
    method get_name (line 216) | def get_name(cls, model):
  class ModelField (line 220) | class ModelField(ModelSQL, ModelView):
    method __setup__ (line 269) | def __setup__(cls):
    method register (line 279) | def register(cls, model, module_name, model_id):
    method clean (line 337) | def clean(cls):
    method default_name (line 361) | def default_name():
    method default_field_description (line 365) | def default_field_description():
    method get_rec_name (line 368) | def get_rec_name(self, name):
    method search_rec_name (line 375) | def search_rec_name(cls, name, clause):
    method get_name (line 386) | def get_name(cls, model, field):
    method read (line 402) | def read(cls, ids, fields_names):
  class ModelAccess (line 474) | class ModelAccess(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 489) | def __setup__(cls):
    method check_xml_record (line 496) | def check_xml_record(accesses, values):
    method default_perm_read (line 500) | def default_perm_read():
    method default_perm_write (line 504) | def default_perm_write():
    method default_perm_create (line 508) | def default_perm_create():
    method default_perm_delete (line 512) | def default_perm_delete():
    method get_rec_name (line 515) | def get_rec_name(self, name):
    method search_rec_name (line 519) | def search_rec_name(cls, name, clause):
    method get_access (line 523) | def get_access(cls, models):
    method check (line 611) | def check(cls, model_name, mode='read', raise_exception=True):
    method check_relation (line 632) | def check_relation(cls, model_name, field_name, mode='read'):
    method write (line 669) | def write(cls, accesses, values, *args):
    method create (line 676) | def create(cls, vlist):
    method delete (line 684) | def delete(cls, accesses):
  class ModelFieldAccess (line 691) | class ModelFieldAccess(DeactivableMixin, ModelSQL, ModelView):
    method check_xml_record (line 705) | def check_xml_record(field_accesses, values):
    method default_perm_read (line 709) | def default_perm_read():
    method default_perm_write (line 713) | def default_perm_write():
    method default_perm_create (line 717) | def default_perm_create():
    method default_perm_delete (line 721) | def default_perm_delete():
    method get_rec_name (line 724) | def get_rec_name(self, name):
    method search_rec_name (line 728) | def search_rec_name(cls, name, clause):
    method get_access (line 732) | def get_access(cls, models):
    method check (line 800) | def check(cls, model_name, fields, mode='read', raise_exception=True,
    method write (line 831) | def write(cls, field_accesses, values, *args):
    method create (line 838) | def create(cls, vlist):
    method delete (line 846) | def delete(cls, field_accesses):
  class ModelButton (line 853) | class ModelButton(DeactivableMixin, ModelSQL, ModelView):
    method __register__ (line 886) | def __register__(cls, module_name):
    method __setup__ (line 895) | def __setup__(cls):
    method create (line 907) | def create(cls, vlist):
    method write (line 915) | def write(cls, buttons, values, *args):
    method delete (line 922) | def delete(cls, buttons):
    method copy (line 930) | def copy(cls, buttons, default=None):
    method get_rules (line 939) | def get_rules(cls, model, name):
    method get_reset (line 960) | def get_reset(cls, model, name):
    method get_view_attributes (line 979) | def get_view_attributes(cls, model, name):
  class ModelButtonRule (line 1002) | class ModelButtonRule(ModelSQL, ModelView):
    method default_number_user (line 1015) | def default_number_user(cls):
    method validate_fields (line 1019) | def validate_fields(cls, rules, field_names):
    method check_condition (line 1024) | def check_condition(cls, rules, field_names=None):
    method test (line 1038) | def test(self, record, clicks):
    method create (line 1052) | def create(cls, vlist):
    method write (line 1061) | def write(cls, buttons, values, *args):
    method delete (line 1069) | def delete(cls, buttons):
  class ModelButtonClick (line 1077) | class ModelButtonClick(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 1085) | def __setup__(cls):
    method register (line 1092) | def register(cls, model, name, records):
    method reset (line 1121) | def reset(cls, model, names, records):
    method get_click (line 1136) | def get_click(cls, model, button, record_id):
  class ModelButtonReset (line 1145) | class ModelButtonReset(ModelSQL):
  class ModelData (line 1156) | class ModelData(ModelSQL, ModelView):
    method __setup__ (line 1178) | def __setup__(cls):
    method __register__ (line 1208) | def __register__(cls, module_name):
    method default_noupdate (line 1226) | def default_noupdate():
    method get_out_of_sync (line 1229) | def get_out_of_sync(self, name):
    method search_out_of_sync (line 1233) | def search_out_of_sync(cls, name, clause):
    method create (line 1244) | def create(cls, *args):
    method write (line 1250) | def write(cls, data, values, *args):
    method delete (line 1257) | def delete(cls, records):
    method has_model (line 1262) | def has_model(cls, model):
    method get_id (line 1274) | def get_id(cls, module, fs_id=None):
    method dump_values (line 1296) | def dump_values(cls, values):
    method load_values (line 1302) | def load_values(cls, values):
    method sync (line 1316) | def sync(cls, records):
  class PrintModelGraphStart (line 1356) | class PrintModelGraphStart(ModelView):
    method default_level (line 1364) | def default_level():
  class PrintModelGraph (line 1368) | class PrintModelGraph(Wizard):
    method transition_print_ (line 1378) | def transition_print_(self):
    method do_print_ (line 1381) | def do_print_(self, action):
  class ModelGraph (line 1390) | class ModelGraph(Report):
    method execute (line 1394) | def execute(cls, ids, data):
    method fill_graph (line 1421) | def fill_graph(cls, models, graph, level=1, filter=None):
  class ModelWorkflowGraph (line 1503) | class ModelWorkflowGraph(Report):
    method execute (line 1507) | def execute(cls, ids, data):
    method fill_graph (line 1532) | def fill_graph(cls, models, graph):

FILE: trytond/ir/module.py
  class DeactivateDependencyError (line 23) | class DeactivateDependencyError(UserError):
  function filter_state (line 27) | def filter_state(state):
  class Module (line 37) | class Module(ModelSQL, ModelView):
    method __setup__ (line 57) | def __setup__(cls):
    method __register__ (line 96) | def __register__(cls, module_name):
    method default_state (line 133) | def default_state():
    method get_version (line 136) | def get_version(self, name):
    method get_parents (line 140) | def get_parents(cls, modules, name):
    method get_childs (line 151) | def get_childs(cls, modules, name):
    method delete (line 164) | def delete(cls, records):
    method on_write (line 176) | def on_write(cls, modules):
    method activate (line 199) | def activate(cls, modules):
    method upgrade (line 218) | def upgrade(cls, modules):
    method activate_cancel (line 237) | def activate_cancel(cls, modules):
    method deactivate (line 245) | def deactivate(cls, modules):
    method deactivate_cancel (line 269) | def deactivate_cancel(cls, modules):
    method upgrade_cancel (line 275) | def upgrade_cancel(cls, modules):
    method update_list (line 279) | def update_list(cls):
    method _update_dependencies (line 309) | def _update_dependencies(cls, module, depends=None):
  class ModuleDependency (line 330) | class ModuleDependency(ModelSQL, ModelView):
    method __setup__ (line 346) | def __setup__(cls):
    method __register__ (line 355) | def __register__(cls, module_name):
    method get_state (line 363) | def get_state(self, name):
  class ModuleConfigWizardItem (line 375) | class ModuleConfigWizardItem(sequence_ordered(), ModelSQL, ModelView):
    method __register__ (line 386) | def __register__(cls, module_name):
    method default_state (line 410) | def default_state():
    method default_sequence (line 414) | def default_sequence():
  class ModuleConfigWizardFirst (line 418) | class ModuleConfigWizardFirst(ModelView):
  class ModuleConfigWizardOther (line 423) | class ModuleConfigWizardOther(ModelView):
    method default_percentage (line 430) | def default_percentage():
  class ModuleConfigWizardDone (line 440) | class ModuleConfigWizardDone(ModelView):
  class ModuleConfigWizard (line 445) | class ModuleConfigWizard(Wizard):
    class ConfigStateAction (line 449) | class ConfigStateAction(StateAction):
      method __init__ (line 451) | def __init__(self):
      method get_action (line 454) | def get_action(self):
    method transition_start (line 486) | def transition_start(self):
    method transition_action (line 492) | def transition_action(self):
    method end (line 512) | def end(self):
  class ModuleActivateUpgradeStart (line 516) | class ModuleActivateUpgradeStart(ModelView):
  class ModuleActivateUpgradeDone (line 522) | class ModuleActivateUpgradeDone(ModelView):
  class ModuleActivateUpgrade (line 527) | class ModuleActivateUpgrade(Wizard):
    method check_access (line 545) | def check_access(cls):
    method default_start (line 551) | def default_start(fields):
    method __init__ (line 562) | def __init__(self, session_id):
    method _save (line 565) | def _save(self):
    method transition_upgrade (line 568) | def transition_upgrade(self):
    method transition_next_ (line 587) | def transition_next_(self):
    method end (line 598) | def end(self):
  class ModuleConfig (line 602) | class ModuleConfig(Wizard):
    method do_activate (line 613) | def do_activate(self, action):
    method transition_activate (line 620) | def transition_activate(cls):
  class ModuleConfigStart (line 624) | class ModuleConfigStart(ModelView):

FILE: trytond/ir/note.py
  class Note (line 20) | class Note(ResourceMixin, ModelSQL, ModelView):
    method default_unread (line 32) | def default_unread():
    method get_wrapper (line 36) | def get_wrapper(cls):
    method on_change_with_message_wrapped (line 40) | def on_change_with_message_wrapped(self, name=None):
    method get_unread (line 46) | def get_unread(cls, ids, name):
    method search_unread (line 68) | def search_unread(cls, name, clause):
    method set_unread (line 87) | def set_unread(cls, notes, name, value):
    method write (line 103) | def write(cls, notes, values, *args):
  class NoteRead (line 115) | class NoteRead(ModelSQL):
  class NoteCopyMixin (line 124) | class NoteCopyMixin(

FILE: trytond/ir/queue_.py
  class Queue (line 20) | class Queue(ModelSQL):
    method __setup__ (line 37) | def __setup__(cls):
    method default_enqueued_at (line 50) | def default_enqueued_at(cls):
    method copy (line 54) | def copy(cls, records, default=None):
    method push (line 65) | def push(cls, name, data, scheduled_at=None, expected_at=None):
    method pull (line 83) | def pull(cls, database, connection, name=None):
    method run (line 151) | def run(self):
    method clean (line 185) | def clean(cls, date=None):
    method caller (line 196) | def caller(cls, model):
  class _Model (line 200) | class _Model(object):
    method __init__ (line 201) | def __init__(self, queue, model):
    method __getattr__ (line 205) | def __getattr__(self, name):
  class _Method (line 209) | class _Method(object):
    method __init__ (line 210) | def __init__(self, queue, model, name):
    method __call__ (line 215) | def __call__(self, instances, *args, **kwargs):

FILE: trytond/ir/resource.py
  class ResourceAccessMixin (line 14) | class ResourceAccessMixin(ModelStorage):
    method __setup__ (line 20) | def __setup__(cls):
    method default_resource (line 28) | def default_resource(cls):
    method get_models (line 32) | def get_models():
    method check_access (line 41) | def check_access(cls, ids, mode='read'):
    method _convert_check_access (line 58) | def _convert_check_access(cls, model, mode):
    method read (line 63) | def read(cls, ids, fields_names):
    method delete (line 68) | def delete(cls, records):
    method write (line 73) | def write(cls, records, values, *args):
    method create (line 83) | def create(cls, vlist):
  class ResourceMixin (line 89) | class ResourceMixin(ResourceAccessMixin, ModelStorage, ModelView):
    method __setup__ (line 112) | def __setup__(cls):
    method get_copy_to_resources (line 118) | def get_copy_to_resources(self):
    method on_change_with_copy_to_resources_visible (line 128) | def on_change_with_copy_to_resources_visible(self, name=None):
    method get_last_user (line 131) | def get_last_user(self, name):
    method get_last_modification (line 135) | def get_last_modification(self, name):
    method order_last_modification (line 140) | def order_last_modification(tables):
  class ResourceCopyMixin (line 145) | class ResourceCopyMixin(ModelStorage):
    method get_resources_to_copy (line 148) | def get_resources_to_copy(cls, name):
  function resource_copy (line 152) | def resource_copy(resource, name, string):

FILE: trytond/ir/routes.py
  function get_token (line 32) | def get_token(record):
  function get_config (line 36) | def get_config(names, section='html', default=None):
  function html_editor (line 52) | def html_editor(request, pool, model, record, field):
  function data (line 196) | def data(request, pool, model):
  function avatar (line 287) | def avatar(request, pool, uuid):

FILE: trytond/ir/rule.py
  class DomainError (line 17) | class DomainError(ValidationError):
  class RuleGroup (line 21) | class RuleGroup(ModelSQL, ModelView):
    method __setup__ (line 41) | def __setup__(cls):
    method default_global_p (line 60) | def default_global_p():
    method default_default_p (line 64) | def default_default_p():
    method default_perm_read (line 68) | def default_perm_read():
    method default_perm_write (line 72) | def default_perm_write():
    method default_perm_create (line 76) | def default_perm_create():
    method default_perm_delete (line 80) | def default_perm_delete():
    method delete (line 84) | def delete(cls, groups):
    method create (line 90) | def create(cls, vlist):
    method write (line 97) | def write(cls, groups, vals, *args):
  class Rule (line 103) | class Rule(ModelSQL, ModelView):
    method __setup__ (line 117) | def __setup__(cls):
    method validate_fields (line 125) | def validate_fields(cls, rules, field_names):
    method check_domain (line 130) | def check_domain(cls, rules, field_names=None):
    method _get_context (line 151) | def _get_context():
    method _get_cache_key (line 164) | def _get_cache_key():
    method get (line 169) | def get(cls, model_name, mode='read'):
    method domain_get (line 268) | def domain_get(cls, model_name, mode='read'):
    method query_get (line 302) | def query_get(cls, model_name, mode='read'):
    method delete (line 314) | def delete(cls, rules):
    method create (line 320) | def create(cls, vlist):
    method write (line 327) | def write(cls, rules, vals, *args):

FILE: trytond/ir/sequence.py
  class AffixError (line 18) | class AffixError(ValidationError):
  class MissingError (line 22) | class MissingError(UserError):
  class LastTimestampError (line 26) | class LastTimestampError(ValidationError):
  class SQLSequenceError (line 30) | class SQLSequenceError(ValidationError):
  class SequenceType (line 34) | class SequenceType(ModelSQL, ModelView):
    method __register__ (line 41) | def __register__(cls, module):
  class Sequence (line 50) | class Sequence(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 107) | def __setup__(cls):
    method __register__ (line 117) | def __register__(cls, module):
    method default_type (line 138) | def default_type():
    method default_number_increment (line 142) | def default_number_increment():
    method default_number_next (line 146) | def default_number_next():
    method default_padding (line 150) | def default_padding():
    method default_timestamp_rounding (line 154) | def default_timestamp_rounding():
    method default_timestamp_offset (line 158) | def default_timestamp_offset():
    method default_last_timestamp (line 162) | def default_last_timestamp():
    method get_number_next (line 165) | def get_number_next(self, name):
    method set_number_next (line 177) | def set_number_next(cls, sequences, name, value):
    method view_attributes (line 183) | def view_attributes(cls):
    method create (line 195) | def create(cls, vlist):
    method write (line 204) | def write(cls, *args):
    method delete (line 220) | def delete(cls, sequences):
    method validate (line 227) | def validate(cls, sequences):
    method validate_fields (line 232) | def validate_fields(cls, sequences, field_names):
    method check_affixes (line 237) | def check_affixes(cls, sequences, field_names=None):
    method check_last_timestamp (line 253) | def check_last_timestamp(cls, sequences):
    method _sql_sequence_name (line 264) | def _sql_sequence_name(self):
    method create_sql_sequence (line 268) | def create_sql_sequence(self, number_next=None):
    method update_sql_sequence (line 287) | def update_sql_sequence(self, number_next=None):
    method delete_sql_sequence (line 313) | def delete_sql_sequence(self):
    method _process (line 322) | def _process(cls, string, date=None):
    method _get_substitutions (line 327) | def _get_substitutions(cls, date):
    method _timestamp (line 343) | def _timestamp(sequence):
    method _get_sequence (line 348) | def _get_sequence(cls, sequence):
    method get (line 377) | def get(self, _lock=False):
  class SequenceStrict (line 399) | class SequenceStrict(Sequence):
    method get (line 405) | def get(self, _lock=True):

FILE: trytond/ir/session.py
  class Session (line 16) | class Session(ModelSQL):
    method __setup__ (line 25) | def __setup__(cls):
    method default_key (line 43) | def default_key(cls, nbytes=None):
    method write (line 47) | def write(cls, *args):
    method new (line 54) | def new(cls, values=None):
    method remove (line 62) | def remove(cls, key, domain=None):
    method check (line 77) | def check(cls, user, key, domain=None):
    method check_timeout (line 107) | def check_timeout(cls, user, key, domain=None):
    method reset (line 127) | def reset(cls, key, domain=None):
    method clear (line 144) | def clear(cls, users, domain=None):
    method create (line 153) | def create(cls, vlist):
  class SessionWizard (line 162) | class SessionWizard(ModelSQL):
    method __setup__ (line 169) | def __setup__(cls):
    method default_data (line 174) | def default_data():

FILE: trytond/ir/translation.py
  class OverriddenError (line 45) | class OverriddenError(UserError):
  class TrytonPOFile (line 49) | class TrytonPOFile(polib.POFile):
    method sort (line 51) | def sort(self):
  class Translation (line 56) | class Translation(ModelSQL, ModelView):
    method __setup__ (line 79) | def __setup__(cls):
    method __register__ (line 110) | def __register__(cls, module_name):
    method register_model (line 130) | def register_model(cls, model, module_name):
    method register_fields (line 170) | def register_fields(cls, model, module_name):
    method register_wizard (line 222) | def register_wizard(cls, wizard, module_name):
    method default_fuzzy (line 264) | def default_fuzzy():
    method default_res_id (line 268) | def default_res_id():
    method get_model (line 271) | def get_model(self, name):
    method search_rec_name (line 275) | def search_rec_name(cls, name, clause):
    method search_model (line 288) | def search_model(cls, name, clause):
    method get_language (line 300) | def get_language(cls):
    method view_attributes (line 313) | def view_attributes(cls):
    method get_ids (line 317) | def get_ids(cls, name, ttype, lang, ids, cached_after=None):
    method set_ids (line 429) | def set_ids(cls, name, ttype, lang, ids, values):
    method delete_ids (line 553) | def delete_ids(cls, model, ttype, ids):
    method get_source (line 566) | def get_source(cls, name, ttype, lang, source=None):
    method get_sources (line 573) | def get_sources(cls, args):
    method get_report (line 640) | def get_report(cls, report_name, text):
    method copy (line 663) | def copy(cls, translations, default=None):
    method delete (line 670) | def delete(cls, translations):
    method create (line 684) | def create(cls, vlist):
    method write (line 704) | def write(cls, *args):
    method extra_model_data (line 718) | def extra_model_data(cls, model_data):
    method unique_key (line 729) | def unique_key(self):
    method from_poentry (line 737) | def from_poentry(cls, entry):
    method translation_import (line 749) | def translation_import(cls, lang, module, po_path):
    method translation_export (line 894) | def translation_export(cls, lang, module):
  class TranslationSetStart (line 953) | class TranslationSetStart(ModelView):
  class TranslationSetSucceed (line 958) | class TranslationSetSucceed(ModelView):
  class TranslationSet (line 963) | class TranslationSet(Wizard):
    method extract_report_opendocument (line 978) | def extract_report_opendocument(self, content):
    method extract_report_genshi (line 1011) | def extract_report_genshi(template_class):
    method set_report (line 1038) | def set_report(self):
    method _translate_view (line 1124) | def _translate_view(self, element):
    method set_view (line 1135) | def set_view(self):
    method transition_set_ (line 1222) | def transition_set_(self):
  class TranslationCleanStart (line 1228) | class TranslationCleanStart(ModelView):
  class TranslationCleanSucceed (line 1233) | class TranslationCleanSucceed(ModelView):
  class TranslationClean (line 1238) | class TranslationClean(Wizard):
    method _clean_field (line 1254) | def _clean_field(translation):
    method _clean_model (line 1271) | def _clean_model(translation):
    method _clean_report (line 1292) | def _clean_report(translation):
    method _clean_selection (line 1303) | def _clean_selection(translation):
    method _clean_view (line 1325) | def _clean_view(translation):
    method _clean_wizard_button (line 1334) | def _clean_wizard_button(translation):
    method _clean_help (line 1355) | def _clean_help(translation):
    method transition_clean (line 1373) | def transition_clean(self):
  class TranslationUpdateStart (line 1405) | class TranslationUpdateStart(ModelView):
    method default_language (line 1413) | def default_language():
  class TranslationUpdate (line 1426) | class TranslationUpdate(Wizard):
    method transition_update (line 1442) | def transition_update():
    method do_update (line 1445) | def do_update(self, action):
  class TranslationExportStart (line 1607) | class TranslationExportStart(ModelView):
    method default_language (line 1622) | def default_language(cls):
  class TranslationExportResult (line 1633) | class TranslationExportResult(ModelView):
  class TranslationExport (line 1643) | class TranslationExport(Wizard):
    method transition_export (line 1658) | def transition_export(self):
    method default_result (line 1665) | def default_result(self, fields):
  class TranslationReport (line 1677) | class TranslationReport(Wizard):
    method do_open_ (line 1683) | def do_open_(self, action):

FILE: trytond/ir/trigger.py
  class ConditionError (line 23) | class ConditionError(ValidationError):
  class Trigger (line 27) | class Trigger(DeactivableMixin, ModelSQL, ModelView):
    method __setup__ (line 65) | def __setup__(cls):
    method __register__ (line 79) | def __register__(cls, module_name):
    method validate_fields (line 118) | def validate_fields(cls, triggers, field_names):
    method check_condition (line 123) | def check_condition(cls, triggers, field_names=None):
    method default_limit_number (line 139) | def default_limit_number():
    method on_change_on_time (line 143) | def on_change_on_time(self):
    method on_change_on_create (line 150) | def on_change_on_create(self):
    method on_change_on_write (line 155) | def on_change_on_write(self):
    method on_change_on_delete (line 160) | def on_change_on_delete(self):
    method get_triggers (line 165) | def get_triggers(cls, model_name, mode):
    method eval (line 187) | def eval(self, record):
    method queue_trigger_action (line 198) | def queue_trigger_action(self, records):
    method trigger_action (line 205) | def trigger_action(self, ids):
    method trigger_time (line 281) | def trigger_time(cls):
    method create (line 296) | def create(cls, vlist):
    method write (line 303) | def write(cls, triggers, values, *args):
    method delete (line 309) | def delete(cls, records):
  class TriggerLog (line 315) | class TriggerLog(ModelSQL):
    method __setup__ (line 323) | def __setup__(cls):

FILE: trytond/ir/ui/icon.py
  class Icon (line 13) | class Icon(sequence_ordered(), ModelSQL, ModelView):
    method __setup__ (line 24) | def __setup__(cls):
    method __register__ (line 31) | def __register__(cls, module_name):
    method default_module (line 40) | def default_module():
    method default_sequence (line 44) | def default_sequence():
    method list_icons (line 48) | def list_icons(cls):
    method get_icon (line 61) | def get_icon(self, name):
    method create (line 70) | def create(cls, vlist):
    method write (line 76) | def write(cls, *args):
    method delete (line 81) | def delete(cls, icons):

FILE: trytond/ir/ui/menu.py
  function one_in (line 14) | def one_in(i, j):
  class UIMenu (line 78) | class UIMenu(
    method order_complete_name (line 105) | def order_complete_name(cls, tables):
    method default_icon (line 109) | def default_icon():
    method default_sequence (line 113) | def default_sequence(cls):
    method list_icons (line 117) | def list_icons():
    method search_global (line 124) | def search_global(cls, text):
    method search (line 133) | def search(cls, domain, offset=0, limit=None, order=None, count=False,
    method get_action (line 156) | def get_action(cls, menus, name):
    method set_action (line 186) | def set_action(cls, menus, name, value):
    method get_favorite (line 222) | def get_favorite(cls, menus, name):
  class UIMenuFavorite (line 236) | class UIMenuFavorite(sequence_ordered(), ModelSQL, ModelView):
    method __setup__ (line 246) | def __setup__(cls):
    method default_user (line 255) | def default_user():
    method get (line 259) | def get(cls):
    method set (line 267) | def set(cls, menu_id):
    method unset (line 275) | def unset(cls, menu_id):

FILE: trytond/ir/ui/view.py
  class XMLError (line 22) | class XMLError(ValidationError):
  class View (line 26) | class View(ModelSQL, ModelView):
    method __setup__ (line 73) | def __setup__(cls):
    method default_priority (line 96) | def default_priority():
    method default_module (line 100) | def default_module():
    method get_rec_name (line 103) | def get_rec_name(self, name):
    method show (line 110) | def show(cls, views):
    method get_rng (line 114) | def get_rng(cls, type_):
    method rng_type (line 127) | def rng_type(self):
    method validate (line 133) | def validate(cls, views):
    method check_xml (line 138) | def check_xml(cls, views):
    method get_arch (line 182) | def get_arch(self, name):
    method set_arch (line 197) | def set_arch(cls, views, name, value):
    method delete (line 201) | def delete(cls, views):
    method create (line 208) | def create(cls, vlist):
    method write (line 216) | def write(cls, views, values, *args):
    method _module_index (line 223) | def _module_index(self):
    method view_get (line 232) | def view_get(self, model=None):
    method inherit_apply (line 279) | def inherit_apply(cls, tree, inherit):
    method _inherit_apply_replace (line 294) | def _inherit_apply_replace(cls, tree, element, target):
    method _inherit_apply_replace_attributes (line 303) | def _inherit_apply_replace_attributes(cls, tree, element, target):
    method _inherit_apply_inside (line 309) | def _inherit_apply_inside(cls, tree, element, target):
    method _inherit_apply_after (line 313) | def _inherit_apply_after(cls, tree, element, target):
    method _inherit_apply_before (line 324) | def _inherit_apply_before(cls, tree, element, target):
    method _translate (line 331) | def _translate(cls, element, model, language):
  class ShowViewStart (line 344) | class ShowViewStart(ModelView):
  class ShowView (line 350) | class ShowView(Wizard):
    class ShowStateView (line 354) | class ShowStateView(StateView):
      method __init__ (line 356) | def __init__(self, model_name, buttons):
      method get_view (line 359) | def get_view(self, wizard, state_name):
      method get_defaults (line 370) | def get_defaults(self, wizard, state_name, fields):
  class ViewTreeWidth (line 378) | class ViewTreeWidth(ModelSQL, ModelView):
    method __setup__ (line 389) | def __setup__(cls):
    method delete (line 403) | def delete(cls, records):
    method create (line 408) | def create(cls, vlist):
    method write (line 414) | def write(cls, records, values, *args):
    method set_width (line 419) | def set_width(cls, model, fields):
  class ViewTreeOptional (line 443) | class ViewTreeOptional(ModelSQL, ModelView):
    method __setup__ (line 457) | def __setup__(cls):
    method create (line 470) | def create(cls, vlist):
    method write (line 476) | def write(cls, *args):
    method delete (line 481) | def delete(cls, records):
    method set_optional (line 486) | def set_optional(cls, view_id, fields):
  class ViewTreeState (line 506) | class ViewTreeState(ModelSQL, ModelView):
    method __setup__ (line 519) | def __setup__(cls):
    method default_nodes (line 536) | def default_nodes():
    method default_selected_nodes (line 540) | def default_selected_nodes():
    method set (line 544) | def set(cls, model, domain, child_name, nodes, selected_nodes):
    method get (line 565) | def get(cls, model, domain, child_name):
  class ViewSearch (line 584) | class ViewSearch(ModelSQL, ModelView):
    method __setup__ (line 594) | def __setup__(cls):
    method __register__ (line 601) | def __register__(cls, module):
    method default_user (line 609) | def default_user():
    method validate_fields (line 613) | def validate_fields(cls, searches, field_names):
    method check_domain (line 618) | def check_domain(cls, searches, field_names):
    method get_search (line 651) | def get_search(cls):

FILE: trytond/model/active.py
  class DeactivableMixin (line 11) | class DeactivableMixin(Model):
    method default_active (line 20) | def default_active(cls):
    method __post_setup__ (line 24) | def __post_setup__(cls):

FILE: trytond/model/avatar.py
  function avatar_mixin (line 9) | def avatar_mixin(size=64, default=None):

FILE: trytond/model/descriptors.py
  class dualmethod (line 6) | class dualmethod(object):
    method __init__ (line 23) | def __init__(self, func):
    method __get__ (line 26) | def __get__(self, instance, owner):

FILE: trytond/model/dictschema.py
  class DomainError (line 18) | class DomainError(ValidationError):
  class SelectionError (line 22) | class SelectionError(ValidationError):
  class DictSchemaMixin (line 26) | class DictSchemaMixin(object):
    method __setup__ (line 90) | def __setup__(cls):
    method default_digits (line 98) | def default_digits():
    method default_selection_sorted (line 102) | def default_selection_sorted():
    method on_change_string (line 106) | def on_change_string(self):
    method validate_fields (line 111) | def validate_fields(cls, schemas, field_names):
    method check_domain (line 117) | def check_domain(cls, schemas, field_names=None):
    method check_selection (line 135) | def check_selection(cls, schemas, field_names=None):
    method get_selection_json (line 150) | def get_selection_json(self, name):
    method get_keys (line 158) | def get_keys(cls, records):
    method search_get_keys (line 188) | def search_get_keys(cls, domain, limit=None):
    method get_relation_fields (line 193) | def get_relation_fields(cls):
    method create (line 205) | def create(cls, vlist):
    method write (line 211) | def write(cls, *args):
    method delete (line 216) | def delete(cls, records):
    method format (line 220) | def format(self, value, lang=None):

FILE: trytond/model/digits.py
  class DigitsMixin (line 7) | class DigitsMixin:
    method __setup__ (line 13) | def __setup__(cls):
    method get_digits (line 19) | def get_digits(self):
    method _get_digits (line 28) | def _get_digits(self):
    method write (line 32) | def write(cls, *args):

FILE: trytond/model/fields/binary.py
  function caster (line 12) | def caster(d):
  class Binary (line 20) | class Binary(Field):
    method __init__ (line 28) | def __init__(self, string='', help='', required=False, readonly=False,
    method display_depends (line 41) | def display_depends(self):
    method get (line 47) | def get(self, ids, model, name, values=None):
    method set (line 108) | def set(self, Model, name, ids, value, *args):
    method definition (line 129) | def definition(self, model, language):

FILE: trytond/model/fields/boolean.py
  class Boolean (line 7) | class Boolean(Field):
    method __init__ (line 15) | def __init__(self, string='', help='', readonly=False, domain=None,
    method _domain_add_null (line 25) | def _domain_add_null(self, column, operator, value, expression):

FILE: trytond/model/fields/char.py
  class Char (line 18) | class Char(FieldTranslate):
    method __init__ (line 28) | def __init__(self, string='', size=None, help='', required=False,
    method _get_size (line 53) | def _get_size(self):
    method _set_size (line 56) | def _set_size(self, value):
    method strip (line 63) | def strip(self):
    method strip (line 67) | def strip(self, value):
    method _sql_type (line 72) | def _sql_type(self):
    method __set__ (line 78) | def __set__(self, inst, value):
    method sql_format (line 88) | def sql_format(self, value):
    method set_rpc (line 108) | def set_rpc(self, model):
    method _domain_column (line 116) | def _domain_column(self, operator, column):
    method _domain_value (line 123) | def _domain_value(self, operator, value):
    method convert_domain (line 130) | def convert_domain(self, domain, tables, Model):
    method convert_order (line 191) | def convert_order(self, name, tables, Model):
    method definition (line 232) | def definition(self, model, language):

FILE: trytond/model/fields/date.py
  class SQLite_Date (line 14) | class SQLite_Date(Function):
  class SQLite_DateTime (line 19) | class SQLite_DateTime(Function):
  class SQLite_Time (line 24) | class SQLite_Time(Function):
  class Date (line 29) | class Date(Field):
    method sql_format (line 37) | def sql_format(self, value):
    method sql_cast (line 45) | def sql_cast(self, expression, timezone=None):
  class FormatMixin (line 54) | class FormatMixin(Field):
    method definition (line 56) | def definition(self, model, language):
    method display_depends (line 63) | def display_depends(self):
    method validation_depends (line 70) | def validation_depends(self):
  class Timestamp (line 77) | class Timestamp(FormatMixin, Field):
    method sql_format (line 86) | def sql_format(self, value):
    method sql_cast (line 91) | def sql_cast(self, expression):
  class DateTime (line 97) | class DateTime(Timestamp):
    method __init__ (line 104) | def __init__(self, string='', format='%H:%M:%S', help='', required=False,
    method sql_format (line 119) | def sql_format(self, value):
  class Time (line 126) | class Time(FormatMixin, Field):
    method __init__ (line 134) | def __init__(self, string='', format='%H:%M:%S', help='', required=False,
    method sql_format (line 147) | def sql_format(self, value):
    method sql_cast (line 155) | def sql_cast(self, expression):
  class TimeDelta (line 161) | class TimeDelta(Field):
    method __init__ (line 169) | def __init__(self, string='', converter=None, help='', required=False,
    method sql_format (line 183) | def sql_format(self, value):
    method get (line 196) | def get(cls, ids, model, name, values=None):
    method definition (line 213) | def definition(self, model, language):

FILE: trytond/model/fields/dict.py
  class Dict (line 23) | class Dict(Field):
    method __init__ (line 29) | def __init__(self, schema_model, string='', help='', required=False,
    method get (line 38) | def get(self, ids, model, name, values=None):
    method sql_format (line 52) | def sql_format(self, value):
    method __set__ (line 65) | def __set__(self, inst, value):
    method translated (line 70) | def translated(self, name=None, type_='values'):
    method _domain_column (line 78) | def _domain_column(self, operator, column, key=None):
    method _domain_value (line 88) | def _domain_value(self, operator, value):
    method _domain_add_null (line 105) | def _domain_add_null(self, column, operator, value, expression):
    method convert_domain (line 115) | def convert_domain(self, domain, tables, Model):
    method convert_order (line 166) | def convert_order(self, name, tables, Model):
    method definition (line 175) | def definition(self, model, language):
  class TranslatedDict (line 181) | class TranslatedDict(object):
    method __init__ (line 184) | def __init__(self, name, type_):
    method __get__ (line 189) | def __get__(self, inst, cls):

FILE: trytond/model/fields/field.py
  function domain_validate (line 26) | def domain_validate(value):
  function states_validate (line 51) | def states_validate(value):
  function depends_validate (line 65) | def depends_validate(value):
  function context_validate (line 69) | def context_validate(value):
  function size_validate (line 73) | def size_validate(value):
  function search_order_validate (line 81) | def search_order_validate(value):
  function _set_value (line 88) | def _set_value(record, field):
  function depends (line 106) | def depends(*fields, **kwargs):
  function _iter_eval_fields (line 129) | def _iter_eval_fields(value):
  function get_eval_fields (line 143) | def get_eval_fields(value):
  function instanciate_values (line 148) | def instanciate_values(Target, value, **extra):
  function instantiate_context (line 177) | def instantiate_context(field, record):
  function on_change_result (line 192) | def on_change_result(record):
  function with_inactive_records (line 196) | def with_inactive_records(func):
  function sanitize_sql_expression (line 220) | def sanitize_sql_expression(expression):
  class Field (line 228) | class Field(object):
    method __init__ (line 233) | def __init__(self, string='', help='', required=False, readonly=False,
    method string (line 293) | def string(self):
    method string (line 297) | def string(self, value):
    method help (line 301) | def help(self):
    method help (line 305) | def help(self, value):
    method _get_domain (line 308) | def _get_domain(self):
    method _set_domain (line 311) | def _set_domain(self, value):
    method _get_states (line 319) | def _get_states(self):
    method _set_states (line 322) | def _set_states(self, value):
    method _get_depends (line 328) | def _get_depends(self):
    method _set_depends (line 331) | def _set_depends(self, value):
    method display_depends (line 339) | def display_depends(self):
    method edition_depends (line 344) | def edition_depends(self):
    method validation_depends (line 351) | def validation_depends(self):
    method _get_context (line 356) | def _get_context(self):
    method _set_context (line 359) | def _set_context(self, value):
    method __get__ (line 365) | def __get__(self, inst, cls):
    method __set__ (line 373) | def __set__(self, inst, value):
    method sql_format (line 384) | def sql_format(self, value):
    method sql_type (line 395) | def sql_type(self):
    method sql_cast (line 399) | def sql_cast(self, expression):
    method sql_column (line 402) | def sql_column(self, table):
    method _domain_column (line 405) | def _domain_column(self, operator, column):
    method _domain_value (line 408) | def _domain_value(self, operator, value):
    method _domain_add_null (line 416) | def _domain_add_null(self, column, operator, value, expression):
    method convert_domain (line 426) | def convert_domain(self, domain, tables, Model):
    method convert_order (line 442) | def convert_order(self, name, tables, Model):
    method set_rpc (line 452) | def set_rpc(self, model):
    method definition (line 465) | def definition(self, model, language):
    method definition_translations (line 524) | def definition_translations(self, model, language):
  class FieldTranslate (line 535) | class FieldTranslate(Field):
    method _get_translation_join (line 537) | def _get_translation_join(
    method _get_translation_column (line 636) | def _get_translation_column(self, Model, name, domain=None):
    method convert_domain (line 655) | def convert_domain(self, domain, tables, Model):
    method _get_translation_order (line 675) | def _get_translation_order(self, tables, Model, name):
    method convert_order (line 711) | def convert_order(self, name, tables, Model):
    method definition (line 719) | def definition(self, model, language):

FILE: trytond/model/fields/float.py
  function digits_validate (line 9) | def digits_validate(value):
  function _get_digits_depends (line 22) | def _get_digits_depends(field):
  class Float (line 29) | class Float(Field):
    method __init__ (line 37) | def __init__(self, string='', digits=None, help='', required=False,
    method _get_digits (line 54) | def _get_digits(self):
    method _set_digits (line 57) | def _set_digits(self, value):
    method definition (line 63) | def definition(self, model, language):
    method display_depends (line 70) | def display_depends(self):
    method edition_depends (line 74) | def edition_depends(self):
    method validation_depends (line 78) | def validation_depends(self):

FILE: trytond/model/fields/function.py
  function getter_context (line 14) | def getter_context(func):
  class Function (line 30) | class Function(Field):
    method __init__ (line 35) | def __init__(self, field, getter, setter=None, searcher=None,
    method __copy__ (line 60) | def __copy__(self):
    method __deepcopy__ (line 66) | def __deepcopy__(self, memo):
    method __getattr__ (line 72) | def __getattr__(self, name):
    method __getitem__ (line 75) | def __getitem__(self, name):
    method __setattr__ (line 78) | def __setattr__(self, name, value):
    method set_rpc (line 85) | def set_rpc(self, model):
    method sql_format (line 88) | def sql_format(self, value):
    method sql_type (line 91) | def sql_type(self):
    method convert_domain (line 94) | def convert_domain(self, domain, tables, Model):
    method get (line 107) | def get(self, ids, Model, name, values=None):
    method set (line 143) | def set(self, Model, name, ids, value, *args):
    method __get__ (line 159) | def __get__(self, inst, cls):
    method __set__ (line 172) | def __set__(self, inst, value):
    method definition (line 175) | def definition(self, model, language):
    method getter_multiple (line 182) | def getter_multiple(self, method):
  function getter (line 191) | def getter(name):
  function setter (line 194) | def setter(name):
  class MultiValue (line 200) | class MultiValue(Function):
    method __init__ (line 202) | def __init__(self, field, loading='lazy'):
    method __copy__ (line 207) | def __copy__(self):
    method __deepcopy__ (line 210) | def __deepcopy__(self, memo):

FILE: trytond/model/fields/integer.py
  class Integer (line 6) | class Integer(Field):
  class BigInteger (line 15) | class BigInteger(Integer):

FILE: trytond/model/fields/many2many.py
  class Many2Many (line 21) | class Many2Many(Field):
    method __init__ (line 27) | def __init__(self, relation_name, origin, target, string='', order=None,
    method _get_size (line 66) | def _get_size(self):
    method _set_size (line 69) | def _set_size(self, value):
    method search_order (line 76) | def search_order(self):
    method search_order (line 80) | def search_order(self, value):
    method search_context (line 85) | def search_context(self):
    method search_context (line 89) | def search_context(self, value):
    method filter (line 94) | def filter(self):
    method filter (line 98) | def filter(self, value):
    method add_remove (line 104) | def add_remove(self):
    method display_depends (line 108) | def display_depends(self):
    method edition_depends (line 115) | def edition_depends(self):
    method validation_depends (line 121) | def validation_depends(self):
    method sql_type (line 126) | def sql_type(self):
    method get (line 129) | def get(self, ids, model, name, values=None):
    method set (line 172) | def set(self, Model, name, ids, values, *args):
    method get_relation (line 294) | def get_relation(self):
    method get_target (line 298) | def get_target(self):
    method __set__ (line 305) | def __set__(self, inst, value):
    method delete (line 312) | def delete(self, inst, records):
    method convert_domain_tree (line 321) | def convert_domain_tree(self, domain, tables):
    method convert_domain (line 357) | def convert_domain(self, domain, tables, Model):
    method definition (line 483) | def definition(self, model, language):

FILE: trytond/model/fields/many2one.py
  class Many2One (line 18) | class Many2One(Field):
    method __init__ (line 25) | def __init__(self, model_name, string='', left=None, right=None, path=...
    method __get_required (line 68) | def __get_required(self):
    method __set_required (line 71) | def __set_required(self, value):
    method search_order (line 79) | def search_order(self):
    method search_order (line 83) | def search_order(self, value):
    method search_context (line 88) | def search_context(self):
    method search_context (line 92) | def search_context(self, value):
    method display_depends (line 97) | def display_depends(self):
    method get_target (line 103) | def get_target(self):
    method __set__ (line 107) | def __set__(self, inst, value):
    method sql_format (line 119) | def sql_format(self, value):
    method convert_domain_path (line 125) | def convert_domain_path(self, domain, tables):
    method convert_domain_mptt (line 146) | def convert_domain_mptt(self, domain, tables):
    method convert_domain_tree (line 167) | def convert_domain_tree(self, domain, tables):
    method convert_domain (line 195) | def convert_domain(self, domain, tables, Model):
    method convert_order (line 276) | def convert_order(self, name, tables, Model):
    method _get_target_tables (line 302) | def _get_target_tables(self, tables):
    method definition (line 331) | def definition(self, model, language):

FILE: trytond/model/fields/multiselection.py
  class MultiSelection (line 18) | class MultiSelection(SelectionMixin, Field):
    method __init__ (line 24) | def __init__(self, selection, string='', sort=True, translate=True,
    method set_rpc (line 48) | def set_rpc(self, model):
    method get (line 58) | def get(self, ids, model, name, values=None):
    method sql_format (line 69) | def sql_format(self, value):
    method _domain_column (line 75) | def _domain_column(self, operator, column):
    method _domain_value (line 79) | def _domain_value(self, operator, value):
    method convert_domain (line 86) | def convert_domain(self, domain, tables, Model):

FILE: trytond/model/fields/numeric.py
  class SQLite_Cast (line 12) | class SQLite_Cast(Cast):
    method as_ (line 14) | def as_(self, output_name):
  class Numeric (line 19) | class Numeric(Float):
    method sql_column (line 27) | def sql_column(self, table):
    method _domain_value (line 35) | def _domain_value(self, operator, value):

FILE: trytond/model/fields/one2many.py
  class One2Many (line 20) | class One2Many(Field):
    method __init__ (line 26) | def __init__(self, model_name, field, string='', add_remove=None,
    method _get_add_remove (line 67) | def _get_add_remove(self):
    method _set_add_remove (line 70) | def _set_add_remove(self, value):
    method _get_size (line 77) | def _get_size(self):
    method _set_size (line 80) | def _set_size(self, value):
    method search_order (line 87) | def search_order(self):
    method search_order (line 91) | def search_order(self, value):
    method search_context (line 96) | def search_context(self):
    method search_context (line 100) | def search_context(self, value):
    method display_depends (line 105) | def display_depends(self):
    method edition_depends (line 112) | def edition_depends(self):
    method validation_depends (line 119) | def validation_depends(self):
    method sql_type (line 122) | def sql_type(self):
    method filter (line 126) | def filter(self):
    method filter (line 130) | def filter(self, value):
    method get (line 135) | def get(self, ids, model, name, values=None):
    method set (line 171) | def set(self, Model, name, ids, values, *args):
    method get_target (line 287) | def get_target(self):
    method __set__ (line 291) | def __set__(self, inst, value):
    method remove (line 301) | def remove(self, inst, records):
    method convert_domain (line 310) | def convert_domain(self, domain, tables, Model):
    method definition (line 384) | def definition(self, model, language):

FILE: trytond/model/fields/one2one.py
  class One2One (line 9) | class One2One(Many2Many):
    method get (line 15) | def get(self, ids, model, name, values=None):
    method set (line 30) | def set(self, Model, name, ids, value, *args):
    method __set__ (line 56) | def __set__(self, inst, value):

FILE: trytond/model/fields/reference.py
  class Reference (line 20) | class Reference(SelectionMixin, Field):
    method __init__ (line 27) | def __init__(self, string='', selection=None, sort=True,
    method domain (line 66) | def domain(self):
    method domain (line 70) | def domain(self, value):
    method search_order (line 79) | def search_order(self):
    method search_order (line 83) | def search_order(self, value):
    method search_context (line 92) | def search_context(self):
    method search_context (line 96) | def search_context(self, value):
    method display_depends (line 101) | def display_depends(self):
    method set_rpc (line 107) | def set_rpc(self, model):
    method get (line 117) | def get(self, ids, model, name, values=None):
    method __set__ (line 167) | def __set__(self, inst, value):
    method sql_format (line 183) | def sql_format(self, value):
    method sql_id (line 191) | def sql_id(self, column, Model):
    method convert_domain (line 198) | def convert_domain(self, domain, tables, Model):
    method definition (line 217) | def definition(self, model, language):

FILE: trytond/model/fields/selection.py
  class SelectionMixin (line 17) | class SelectionMixin(Field):
    method translated (line 21) | def translated(self, name=None):
    method definition (line 29) | def definition(self, model, language):
    method definition_translations (line 60) | def definition_translations(self, model, language):
  class Selection (line 75) | class Selection(SelectionMixin, Field):
    method __init__ (line 83) | def __init__(self, selection, string='', sort=True,
    method set_rpc (line 113) | def set_rpc(self, model):
    method convert_order (line 123) | def convert_order(self, name, tables, Model):
  class TranslatedSelection (line 150) | class TranslatedSelection(object):
    method __init__ (line 153) | def __init__(self, name):
    method __get__ (line 156) | def __get__(self, inst, cls):

FILE: trytond/model/fields/text.py
  class Text (line 12) | class Text(Char):
    method __init__ (line 21) | def __init__(self, *args, strip=False, **kwarg):
  class FullText (line 25) | class FullText(Field):
    method sql_format (line 33) | def sql_format(self, value):
    method _rank_column (line 46) | def _rank_column(self, column, name, Model):
    method convert_domain (line 57) | def convert_domain(self, domain, tables, Model):
    method convert_order (line 88) | def convert_order(self, name, tables, Model):

FILE: trytond/model/match.py
  class MatchMixin (line 5) | class MatchMixin(object):
    method match (line 8) | def match(self, pattern, match_none=False):

FILE: trytond/model/model.py
  class ModelMeta (line 22) | class ModelMeta(PoolMeta):
    method __queue__ (line 24) | def __queue__(self):
  class Model (line 31) | class Model(URLMixin, PoolBase, metaclass=ModelMeta):
    method __setup__ (line 41) | def __setup__(cls):
    method __post_setup__ (line 68) | def __post_setup__(cls):
    method _get_name (line 103) | def _get_name(cls):
    method __register__ (line 115) | def __register__(cls, module_name):
    method default_get (line 132) | def default_get(cls, fields_names, with_rec_name=True):
    method fields_get (line 165) | def fields_get(cls, fields_names=None, level=0):
    method pre_validate (line 233) | def pre_validate(self):
    method __names__ (line 237) | def __names__(cls, field=None, record=None):
    method __init__ (line 263) | def __init__(self, id=None, **kwargs):
    method __copy__ (line 295) | def __copy__(self):
    method __getattr__ (line 301) | def __getattr__(self, name):
    method __contains__ (line 310) | def __contains__(self, name):
    method __int__ (line 313) | def __int__(self):
    method __str__ (line 316) | def __str__(self):
    method __repr__ (line 319) | def __repr__(self):
    method __eq__ (line 326) | def __eq__(self, other):
    method __lt__ (line 333) | def __lt__(self, other):
    method __ne__ (line 338) | def __ne__(self, other):
    method __hash__ (line 341) | def __hash__(self):
    method __bool__ (line 344) | def __bool__(self):
    method _default_values (line 348) | def _default_values(self):
  function record (line 375) | def record(name, field_names):

FILE: trytond/model/modelsingleton.py
  class ModelSingleton (line 8) | class ModelSingleton(ModelStorage):
    method __setup__ (line 14) | def __setup__(cls):
    method get_singleton (line 20) | def get_singleton(cls):
    method create (line 29) | def create(cls, vlist):
    method read (line 38) | def read(cls, ids, fields_names):
    method write (line 58) | def write(cls, records, values, *args):
    method delete (line 77) | def delete(cls, records):
    method copy (line 87) | def copy(cls, records, default=None):
    method search (line 93) | def search(cls, domain, offset=0, limit=None, order=None, count=False):
    method default_get (line 103) | def default_get(cls, fields_names, with_rec_name=True):

FILE: trytond/model/modelsql.py
  class ForeignKeyError (line 35) | class ForeignKeyError(ValidationError):
  class SQLConstraintError (line 39) | class SQLConstraintError(ValidationError):
  class Constraint (line 43) | class Constraint(object):
    method __init__ (line 46) | def __init__(self, table):
    method table (line 51) | def table(self):
    method __str__ (line 54) | def __str__(self):
    method params (line 58) | def params(self):
  class Check (line 62) | class Check(Constraint):
    method __init__ (line 65) | def __init__(self, table, expression):
    method expression (line 71) | def expression(self):
    method __str__ (line 74) | def __str__(self):
    method params (line 78) | def params(self):
  class Unique (line 82) | class Unique(Constraint):
    method __init__ (line 85) | def __init__(self, table, *columns):
    method columns (line 91) | def columns(self):
    method operators (line 95) | def operators(self):
    method __str__ (line 98) | def __str__(self):
    method params (line 102) | def params(self):
  class Exclude (line 109) | class Exclude(Constraint):
    method __init__ (line 112) | def __init__(self, table, *excludes, **kwargs):
    method excludes (line 123) | def excludes(self):
    method columns (line 127) | def columns(self):
    method operators (line 131) | def operators(self):
    method where (line 135) | def where(self):
    method __str__ (line 138) | def __str__(self):
    method params (line 147) | def params(self):
  class Index (line 156) | class Index:
    method __init__ (line 159) | def __init__(self, table, *expressions, **options):
    method __hash__ (line 167) | def __hash__(self):
    method __eq__ (line 174) | def __eq__(self, other):
    class Unaccent (line 183) | class Unaccent(Expression):
      method __init__ (line 187) | def __init__(self, expression):
      method expression (line 191) | def expression(self):
      method __str__ (line 198) | def __str__(self):
      method params (line 202) | def params(self):
    class Usage (line 205) | class Usage:
      method __init__ (line 208) | def __init__(self, **options):
      method __hash__ (line 211) | def __hash__(self):
      method __eq__ (line 214) | def __eq__(self, other):
    class Equality (line 218) | class Equality(Usage):
    class Range (line 221) | class Range(Usage):
    class Similarity (line 224) | class Similarity(Usage):
  function no_table_query (line 228) | def no_table_query(func):
  class ModelSQL (line 237) | class ModelSQL(ModelStorage):
    method __setup__ (line 249) | def __setup__(cls):
    method __post_setup__ (line 287) | def __post_setup__(cls):
    method __table__ (line 338) | def __table__(cls):
    method __table_history__ (line 345) | def __table_history__(cls):
    method __table_handler__ (line 351) | def __table_handler__(cls, module_name=None, history=False):
    method __register__ (line 355) | def __register__(cls, module_name):
    method _update_sql_indexes (line 478) | def _update_sql_indexes(cls):
    method _update_history_table (line 485) | def _update_history_table(cls):
    method __raise_integrity_error (line 494) | def __raise_integrity_error(
    method __raise_data_error (line 540) | def __raise_data_error(
    method history_revisions (line 565) | def history_revisions(cls, ids):
    method _insert_history (line 597) | def _insert_history(cls, ids, deleted=False):
    method _restore_history (line 636) | def _restore_history(cls, ids, datetime, _before=False):
    method restore_history (line 697) | def restore_history(cls, ids, datetime):
    method restore_history_before (line 702) | def restore_history_before(cls, ids, datetime):
    method __check_timestamp (line 707) | def __check_timestamp(cls, ids):
    method create (line 736) | def create(cls, vlist):
    method read (line 878) | def read(cls, ids, fields_names):
    method write (line 1184) | def write(cls, records, values, *args):
    method delete (line 1293) | def delete(cls, records):
    method __check_domain_rule (line 1420) | def __check_domain_rule(cls, ids, mode, nodomain=None):
    method __search_query (line 1499) | def __search_query(cls, domain, count, query, order):
    method __searched_columns (line 1573) | def __searched_columns(
    method __search_order (line 1605) | def __search_order(cls, order, tables):
    method search (line 1635) | def search(cls, domain, offset=0, limit=None, order=None, count=False,
    method search_domain (line 1749) | def search_domain(cls, domain, active_test=True, tables=None):
    method _rebuild_path (line 1791) | def _rebuild_path(cls, field_name):
    method _set_path (line 1812) | def _set_path(cls, field_names, list_ids):
    method _update_path (line 1831) | def _update_path(cls, field_names, list_ids):
    method _update_mptt (line 1872) | def _update_mptt(cls, field_names, list_ids, values=None):
    method _rebuild_tree (line 1889) | def _rebuild_tree(cls, parent, parent_id, left):
    method _update_tree (line 1912) | def _update_tree(cls, record_id, field_name, left, right):
    method validate (line 1971) | def validate(cls, records):
    method lock (line 2023) | def lock(cls, records=None):
  function convert_from (line 2040) | def convert_from(table, tables):
  function split_subquery_domain (line 2054) | def split_subquery_domain(domain):

FILE: trytond/model/modelstorage.py
  function local_cache (line 41) | def local_cache(Model, transaction=None):
  class AccessError (line 47) | class AccessError(UserError):
  class ImportDataError (line 51) | class ImportDataError(UserError):
  class ValidationError (line 55) | class ValidationError(UserError):
  class DomainValidationError (line 59) | class DomainValidationError(ValidationError):
  class RequiredValidationError (line 63) | class RequiredValidationError(ValidationError):
  class SizeValidationError (line 67) | class SizeValidationError(ValidationError):
  class DigitsValidationError (line 71) | class DigitsValidationError(ValidationError):
  class ForbiddenCharValidationError (line 75) | class ForbiddenCharValidationError(ValidationError):
  class SelectionValidationError (line 79) | class SelectionValidationError(ValidationError):
  class TimeFormatValidationError (line 83) | class TimeFormatValidationError(ValidationError):
  function without_check_access (line 87) | def without_check_access(func):
  function is_leaf (line 95) | def is_leaf(expression):
  class ModelStorage (line 102) | class ModelStorage(Model):
    method __setup__ (line 124) | def __setup__(cls):
    method __post_setup__ (line 147) | def __post_setup__(cls):
    method default_create_uid (line 161) | def default_create_uid():
    method default_create_date (line 166) | def default_create_date():
    method create (line 171) | def create(cls, vlist):
    method trigger_create (line 196) | def trigger_create(cls, records):
    method read (line 208) | def read(cls, ids, fields_names):
    method index_get_field (line 221) | def index_get_field(cls, name):
    method write (line 226) | def write(cls, records, values, *args):
    method trigger_write_get_eligibles (line 265) | def trigger_write_get_eligibles(cls, records):
    method trigger_write (line 283) | def trigger_write(cls, eligibles):
    method index_set_field (line 292) | def index_set_field(cls, name):
    method delete (line 297) | def delete(cls, records):
    method trigger_delete (line 345) | def trigger_delete(cls, records):
    method copy (line 358) | def copy(cls, records, default=None):
    method search (line 485) | def search(cls, domain, offset=0, limit=None, order=None, count=False):
    method search_count (line 547) | def search_count(cls, domain, offset=0, limit=None):
    method search_read (line 558) | def search_read(cls, domain, offset=0, limit=None, order=None,
    method _search_domain_active (line 576) | def _search_domain_active(cls, domain, active_test=True):
    method count (line 609) | def count(cls):
    method resources (line 617) | def resources(self):
    method get_rec_name (line 635) | def get_rec_name(self, name):
    method search_rec_name (line 646) | def search_rec_name(cls, name, clause):
    method search_global (line 656) | def search_global(cls, text):
    method browse (line 667) | def browse(cls, ids):
    method __export_row (line 681) | def __export_row(record, fields_names):
    method _convert_field_names (line 741) | def _convert_field_names(cls, fields_names):
    method export_data (line 768) | def export_data(cls, records, fields_names, header=False):
    method export_data_domain (line 778) | def export_data_domain(
    method import_data (line 785) | def import_data(cls, fields_names, data):
    method check_xml_record (line 1124) | def check_xml_record(cls, records, values):
    method validate (line 1161) | def validate(cls, records):
    method validate_fields (line 1165) | def validate_fields(cls, records, field_names):
    method _validate (line 1170) | def _validate(cls, records, field_names=None):
    method _clean_defaults (line 1532) | def _clean_defaults(cls, defaults):
    method __init__ (line 1558) | def __init__(self, id=None, **kwargs):
    method _cache (line 1590) | def _cache(self):
    method __getattr__ (line 1593) | def __getattr__(self, name):
    method _save_values (line 1829) | def _save_values(self):
    method save (line 1914) | def save(cls, records):
  class EvalEnvironment (line 1964) | class EvalEnvironment(dict):
    method __init__ (line 1967) | def __init__(self, record, Model):
    method __getitem__ (line 1972) | def __getitem__(self, item):
    method __getattr__ (line 1991) | def __getattr__(self, item):
    method get (line 1997) | def get(self, item, default=None):
    method __bool__ (line 2004) | def __bool__(self):
  function _record_eval_pyson (line 2008) | def _record_eval_pyson(record, source, encoded=False):

FILE: trytond/model/modelview.py
  class AccessButtonError (line 24) | class AccessButtonError(UserError):
  function on_change (line 28) | def on_change(func):
  class ModelView (line 38) | class ModelView(Model):
    method __setup__ (line 47) | def __setup__(cls):
    method __post_setup__ (line 65) | def __post_setup__(cls):
    method fields_view_get (line 185) | def fields_view_get(cls, view_id=None, view_type='form', level=None):
    method view_toolbar_get (line 280) | def view_toolbar_get(cls):
    method view_attributes (line 317) | def view_attributes(cls):
    method parse_view (line 322) | def parse_view(
    method __parse_fields (line 481) | def __parse_fields(
    method button (line 649) | def button(func):
    method button_action (line 701) | def button_action(action):
    method button_change (line 726) | def button_change(*fields, **kwargs):
    method on_change (line 738) | def on_change(self, fieldnames):
    method on_change_with (line 746) | def on_change_with(self, fieldnames):
    method on_change_notify (line 753) | def on_change_notify(self):
    method _changed_values (line 760) | def _changed_values(self):

FILE: trytond/model/multivalue.py
  class MultiValueMixin (line 10) | class MultiValueMixin(object):
    method multivalue_model (line 14) | def multivalue_model(cls, field):
    method multivalue_records (line 21) | def multivalue_records(self, field):
    method multivalue_record (line 29) | def multivalue_record(self, field, **pattern):
    method __values (line 47) | def __values(self, field, pattern, match_none=True):
    method get_multivalue (line 51) | def get_multivalue(self, name, **pattern):
    method _multivalue_getter (line 63) | def _multivalue_getter(self, name):
    method set_multivalue (line 75) | def set_multivalue(self, name, value, save=True, **pattern):
    method _multivalue_setter (line 89) | def _multivalue_setter(cls, records, name, val):
  class ValueMixin (line 97) | class ValueMixin(MatchMixin):
    method match (line 99) | def match(self, pattern, match_none=True):
  function filter_pattern (line 103) | def filter_pattern(pattern, Value):

FILE: trytond/model/order.py
  function sequence_ordered (line 9) | def sequence_ordered(

FILE: trytond/model/symbol.py
  class SymbolMixin (line 6) | class SymbolMixin(object):
    method __setup__ (line 10) | def __setup__(cls):
    method get_symbol (line 16) | def get_symbol(self, sign, symbol=None):

FILE: trytond/model/tree.py
  class RecursionError (line 11) | class RecursionError(ValidationError):
  function tree (line 15) | def tree(parent='parent', name='name', separator=None):

FILE: trytond/model/union.py
  class UnionMixin (line 9) | class UnionMixin:
    method union_models (line 14) | def union_models():
    method union_shard (line 18) | def union_shard(cls, column, model):
    method union_unshard (line 25) | def union_unshard(cls, record_id):
    method union_column (line 34) | def union_column(cls, name, field, table, Model):
    method union_columns (line 49) | def union_columns(cls, model):
    method table_query (line 63) | def table_query(cls):

FILE: trytond/model/workflow.py
  class Workflow (line 7) | class Workflow(object):
    method __setup__ (line 15) | def __setup__(cls):
    method transition (line 20) | def transition(state):
    method copy (line 51) | def copy(cls, records, default=None):

FILE: trytond/modules/__init__.py
  function update_egg_modules (line 35) | def update_egg_modules():
  function import_module (line 48) | def import_module(name, fullname=None):
  function get_module_info (line 82) | def get_module_info(name):
  class Graph (line 96) | class Graph(dict):
    method get (line 97) | def get(self, name):
    method add (line 104) | def add(self, name, deps):
    method __iter__ (line 110) | def __iter__(self):
  class Node (line 115) | class Node(list):
    method __init__ (line 116) | def __init__(self, name):
    method __repr__ (line 122) | def __repr__(self):
    method depth (line 126) | def depth(self):
    method depth (line 130) | def depth(self, value):
    method append (line 136) | def append(self, node):
  function create_graph (line 142) | def create_graph(module_list):
  function is_module_to_install (line 161) | def is_module_to_install(module, update):
  function load_translations (line 167) | def load_translations(pool, node, languages):
  function load_module_graph (line 187) | def load_module_graph(graph, pool, update=None, lang=None):
  function get_module_list (line 321) | def get_module_list():
  function register_classes (line 339) | def register_classes():
  function load_modules (line 365) | def load_modules(

FILE: trytond/pool.py
  class PoolMeta (line 16) | class PoolMeta(type):
    method __new__ (line 18) | def __new__(cls, name, bases, dct):
  class PoolBase (line 30) | class PoolBase(object, metaclass=PoolMeta):
    method __setup__ (line 32) | def __setup__(cls):
    method __post_setup__ (line 36) | def __post_setup__(cls):
    method __register__ (line 40) | def __register__(cls, module_name):
  class Pool (line 44) | class Pool(object):
    method __new__ (line 60) | def __new__(cls, database_name=None):
    method __init__ (line 74) | def __init__(self, database_name=None):
    method register (line 80) | def register(*classes, **kwargs):
    method register_mixin (line 95) | def register_mixin(mixin, classinfo, module):
    method start (line 99) | def start(cls):
    method stop (line 110) | def stop(cls, database_name):
    method database_list (line 125) | def database_list(cls):
    method lock (line 139) | def lock(self):
    method init (line 145) | def init(self, update=None, lang=None, activatedeps=False):
    method get (line 175) | def get(self, name, type='model'):
    method add (line 202) | def add(self, cls, type='model'):
    method iterobject (line 209) | def iterobject(self, type='model'):
    method fill (line 218) | def fill(self, module, modules):
    method setup (line 242) | def setup(self, classes=None):
    method setup_mixin (line 255) | def setup_mixin(self, type=None, name=None):
    method refresh (line 276) | def refresh(self, modules):
  function isregisteredby (line 281) | def isregisteredby(obj, module, type_='model'):

FILE: trytond/protocols/dispatcher.py
  function rpc (line 41) | def rpc(request, database_name):
  function login (line 53) | def login(request, database_name, user, parameters, language=None):
  function logout (line 74) | def logout(request, database_name):
  function root (line 82) | def root(request, *args):
  function options (line 93) | def options(request, path=None):
  function db_exist (line 97) | def db_exist(request, database_name):
  function db_list (line 105) | def db_list(request, *args):
  function authentication_services (line 116) | def authentication_services(request):
  function register_authentication_service (line 120) | def register_authentication_service(name, url):
  function list_method (line 129) | def list_method(request, pool):
  function get_object_method (line 138) | def get_object_method(request, pool):
  function help_method (line 148) | def help_method(request, pool):
  function _safe_repr (line 153) | def _safe_repr(args, kwargs, short=False):
  function _dispatch (line 163) | def _dispatch(request, pool, *args, **kwargs):

FILE: trytond/protocols/jsonrpc.py
  class JSONDecoder (line 20) | class JSONDecoder(object):
    method register (line 25) | def register(cls, klass, decoder):
    method __call__ (line 29) | def __call__(self, dct):
  function _bytes_decoder (line 47) | def _bytes_decoder(dct):
  class JSONEncoder (line 56) | class JSONEncoder(json.JSONEncoder):
    method register (line 61) | def register(cls, klass, encoder):
    method default (line 65) | def default(self, obj):
  function _bytes_encoder (line 104) | def _bytes_encoder(o):
  class JSONRequest (line 120) | class JSONRequest(Request):
    method parsed_data (line 124) | def parsed_data(self):
    method rpc_method (line 137) | def rpc_method(self):
    method rpc_params (line 144) | def rpc_params(self):
  class JSONProtocol (line 151) | class JSONProtocol:
    method request (line 155) | def request(cls, environ):
    method response (line 159) | def response(cls, data, request):

FILE: trytond/protocols/wrappers.py
  class Request (line 30) | class Request(_Request):
    method __repr__ (line 34) | def __repr__(self):
    method decoded_data (line 56) | def decoded_data(self):
    method parsed_data (line 64) | def parsed_data(self):
    method rpc_method (line 68) | def rpc_method(self):
    method rpc_params (line 72) | def rpc_params(self):
    method authorization (line 76) | def authorization(self):
    method user_id (line 84) | def user_id(self):
    method context (line 108) | def context(self):
  function parse_authorization_header (line 117) | def parse_authorization_header(value):
  function set_max_request_size (line 141) | def set_max_request_size(size):
  function allow_null_origin (line 148) | def allow_null_origin(func):
  function with_pool (line 153) | def with_pool(func):
  function with_transaction (line 181) | def with_transaction(readonly=None, user=0, context=None):
  function user_application (line 225) | def user_application(name, json=True):

FILE: trytond/protocols/xmlrpc.py
  function dump_decimal (line 27) | def dump_decimal(self, value, write):
  function dump_date (line 33) | def dump_date(self, value, write):
  function dump_time (line 42) | def dump_time(self, value, write):
  function dump_timedelta (line 52) | def dump_timedelta(self, value, write):
  function dump_long (line 59) | def dump_long(self, value, write):
  function dump_struct (line 75) | def dump_struct(self, value, write, escape=client.escape):
  class XMLRPCDecoder (line 90) | class XMLRPCDecoder(object):
    method register (line 95) | def register(cls, klass, decoder):
    method __call__ (line 99) | def __call__(self, dct):
  function end_struct (line 115) | def end_struct(self, data):
  class XMLRequest (line 130) | class XMLRequest(Request):
    method parsed_data (line 134) | def parsed_data(self):
    method rpc_method (line 145) | def rpc_method(self):
    method rpc_params (line 149) | def rpc_params(self):
  class XMLProtocol (line 153) | class XMLProtocol:
    method request (line 157) | def request(cls, environ):
    method response (line 161) | def response(cls, data, request):

FILE: trytond/pyson.py
  class PYSON (line 11) | class PYSON(object):
    method pyson (line 13) | def pyson(self):
    method types (line 16) | def types(self):
    method eval (line 20) | def eval(dct, context):
    method __invert__ (line 23) | def __invert__(self):
    method __and__ (line 29) | def __and__(self, other):
    method __or__ (line 43) | def __or__(self, other):
    method __eq__ (line 56) | def __eq__(self, other):
    method __ne__ (line 59) | def __ne__(self, other):
    method __gt__ (line 62) | def __gt__(self, other):
    method __ge__ (line 65) | def __ge__(self, other):
    method __lt__ (line 68) | def __lt__(self, other):
    method __le__ (line 71) | def __le__(self, other):
    method get (line 74) | def get(self, k, d=''):
    method in_ (line 77) | def in_(self, obj):
    method contains (line 80) | def contains(self, k):
    method __repr__ (line 83) | def __repr__(self):
    method __repr_params__ (line 88) | def __repr_params__(self):
  class PYSONEncoder (line 92) | class PYSONEncoder(json.JSONEncoder):
    method default (line 94) | def default(self, obj):
  class PYSONDecoder (line 109) | class PYSONDecoder(json.JSONDecoder):
    method __init__ (line 111) | def __init__(self, context=None, noeval=False):
    method _object_hook (line 116) | def _object_hook(self, dct):
  class Eval (line 129) | class Eval(PYSON):
    method __init__ (line 131) | def __init__(self, v, d=''):
    method __repr_params__ (line 137) | def __repr_params__(self):
    method pyson (line 140) | def pyson(self):
    method types (line 147) | def types(self):
    method eval (line 154) | def eval(dct, context):
    method basename (line 164) | def basename(self):
  class Not (line 173) | class Not(PYSON):
    method __init__ (line 175) | def __init__(self, v):
    method __repr_params__ (line 185) | def __repr_params__(self):
    method pyson (line 188) | def pyson(self):
    method types (line 194) | def types(self):
    method eval (line 198) | def eval(dct, context):
  class Bool (line 202) | class Bool(PYSON):
    method __init__ (line 204) | def __init__(self, v):
    method __repr_params__ (line 209) | def __repr_params__(self):
    method pyson (line 212) | def pyson(self):
    method types (line 218) | def types(self):
    method eval (line 222) | def eval(dct, context):
  class And (line 226) | class And(PYSON):
    method __init__ (line 228) | def __init__(self, *statements, **kwargs):
    method __repr_params__ (line 241) | def __repr_params__(self):
    method pyson (line 244) | def pyson(self):
    method types (line 250) | def types(self):
    method eval (line 254) | def eval(dct, context):
  class Or (line 258) | class Or(And):
    method pyson (line 260) | def pyson(self):
    method eval (line 266) | def eval(dct, context):
  class Equal (line 270) | class Equal(PYSON):
    method __init__ (line 272) | def __init__(self, s1, s2):
    method __repr_params__ (line 288) | def __repr_params__(self):
    method pyson (line 291) | def pyson(self):
    method types (line 298) | def types(self):
    method eval (line 302) | def eval(dct, context):
  class Greater (line 306) | class Greater(PYSON):
    method __init__ (line 308) | def __init__(self, s1, s2, e=False):
    method __repr_params__ (line 332) | def __repr_params__(self):
    method pyson (line 335) | def pyson(self):
    method types (line 343) | def types(self):
    method _convert (line 347) | def _convert(dct):
    method eval (line 363) | def eval(dct, context):
  class Less (line 373) | class Less(Greater):
    method pyson (line 375) | def pyson(self):
    method eval (line 381) | def eval(dct, context):
  class If (line 391) | class If(PYSON):
    method __init__ (line 393) | def __init__(self, c, t, e=None):
    method __repr_params__ (line 406) | def __repr_params__(self):
    method pyson (line 409) | def pyson(self):
    method types (line 417) | def types(self):
    method eval (line 429) | def eval(dct, context):
  class Get (line 436) | class Get(PYSON):
    method __init__ (line 438) | def __init__(self, v, k, d=''):
    method __repr_params__ (line 454) | def __repr_params__(self):
    method pyson (line 457) | def pyson(self):
    method types (line 465) | def types(self):
    method eval (line 472) | def eval(dct, context):
  class In (line 476) | class In(PYSON):
    method __init__ (line 478) | def __init__(self, k, v):
    method __repr_params__ (line 506) | def __repr_params__(self):
    method pyson (line 509) | def pyson(self):
    method types (line 516) | def types(self):
    method eval (line 520) | def eval(dct, context):
  class Date (line 527) | class Date(PYSON):
    method __init__ (line 529) | def __init__(self, year=None, month=None, day=None,
    method __repr_params__ (line 554) | def __repr_params__(self):
    method pyson (line 559) | def pyson(self):
    method types (line 571) | def types(self):
    method eval (line 575) | def eval(dct, context):
  class DateTime (line 591) | class DateTime(Date):
    method __init__ (line 593) | def __init__(self, year=None, month=None, day=None,
    method __repr_params__ (line 627) | def __repr_params__(self):
    method pyson (line 636) | def pyson(self):
    method types (line 649) | def types(self):
    method eval (line 653) | def eval(dct, context):
  class TimeDelta (line 678) | class TimeDelta(PYSON):
    method __init__ (line 680) | def __init__(self, days=0, seconds=0, microseconds=0):
    method __repr_params__ (line 693) | def __repr_params__(self):
    method pyson (line 696) | def pyson(self):
    method types (line 704) | def types(self):
    method eval (line 708) | def eval(dct, context):
  class Len (line 716) | class Len(PYSON):
    method __init__ (line 718) | def __init__(self, v):
    method __repr_params__ (line 729) | def __repr_params__(self):
    method pyson (line 732) | def pyson(self):
    method types (line 738) | def types(self):
    method eval (line 742) | def eval(dct, context):
  class Id (line 746) | class Id(PYSON):
    method __init__ (line 749) | def __init__(self, module, fs_id):
    method __repr_params__ (line 755) | def __repr_params__(self):
    method pyson (line 758) | def pyson(self):
    method types (line 763) | def types(self):

FILE: trytond/report/report.py
  class TranslateFactory (line 104) | class TranslateFactory:
    method __init__ (line 106) | def __init__(self, report_name, translation):
    method __call__ (line 110) | def __call__(self, text):
  class Report (line 114) | class Report(URLMixin, PoolBase):
    method __setup__ (line 117) | def __setup__(cls):
    method check_access (line 124) | def check_access(cls):
    method header_key (line 138) | def header_key(cls, record):
    method execute (line 142) | def execute(cls, ids, data):
    method _execute (line 249) | def _execute(cls, records, header, data, action):
    method _get_records (line 257) | def _get_records(cls, ids, model, data):
    method get_context (line 299) | def get_context(cls, records, header, data):
    method _callback_loader (line 328) | def _callback_loader(cls, report, template):
    method render (line 341) | def render(cls, report, report_context):
    method convert (line 357) | def convert(cls, report, data, timeout=5 * 60, retry=5):
    method format_date (line 410) | def format_date(cls, value, lang=None, format=None):
    method format_datetime (line 418) | def format_datetime(cls, value, lang=None, format=None, timezone=None):
    method format_timedelta (line 432) | def format_timedelta(cls, value, converter=None, lang=None):
    method format_currency (line 475) | def format_currency(
    method format_number (line 486) | def format_number(
    method format_number_symbol (line 496) | def format_number_symbol(
  function get_email (line 506) | def get_email(report, record, languages):

FILE: trytond/res/__init__.py
  function register (line 10) | def register():

FILE: trytond/res/group.py
  class MenuMany2Many (line 13) | class MenuMany2Many(fields.Many2Many):
    method get (line 15) | def get(self, ids, model, name, values=None):
  class Group (line 31) | class Group(DeactivableMixin, tree(), ModelSQL, ModelView):
    method __setup__ (line 52) | def __setup__(cls):
    method write (line 62) | def write(cls, *args):
    method copy (line 75) | def copy(cls, groups, default=None):
    method group_parent_all_cte (line 93) | def group_parent_all_cte(cls):

FILE: trytond/res/ir.py
  class UIMenu (line 10) | class UIMenu(metaclass=PoolMeta):
  class UIMenuGroup (line 17) | class UIMenuGroup(ModelSQL):
    method create (line 26) | def create(cls, vlist):
    method write (line 33) | def write(cls, records, values, *args):
    method delete (line 39) | def delete(cls, records):
  class ActionGroup (line 45) | class ActionGroup(ModelSQL):
    method create (line 54) | def create(cls, vlist):
    method write (line 66) | def write(cls, records, values, *args):
    method delete (line 80) | def delete(cls, records):
  class Action (line 86) | class Action(metaclass=PoolMeta):
  class ActionMixin (line 93) | class ActionMixin(metaclass=PoolMeta):
    method get_groups (line 96) | def get_groups(cls, name, action_id=None):
  class ActionReport (line 108) | class ActionReport(ActionMixin):
  class ActionActWindow (line 112) | class ActionActWindow(ActionMixin):
  class ActionWizard (line 116) | class ActionWizard(ActionMixin):
  class ActionURL (line 120) | class ActionURL(ActionMixin):
  class ActionKeyword (line 124) | class ActionKeyword(metaclass=PoolMeta):
    method get_groups (line 130) | def get_groups(self, name):
    method search_groups (line 134) | def search_groups(cls, name, clause):
  class ModelButton (line 138) | class ModelButton(metaclass=PoolMeta):
    method create (line 146) | def create(cls, vlist):
    method write (line 152) | def write(cls, buttons, values, *args):
    method delete (line 157) | def delete(cls, buttons):
    method get_groups (line 162) | def get_groups(cls, model, name):
  class ModelButtonGroup (line 183) | class ModelButtonGroup(DeactivableMixin, ModelSQL):
    method create (line 192) | def create(cls, vlist):
    method write (line 200) | def write(cls, records, values, *args):
    method delete (line 207) | def delete(cls, records):
  class ModelButtonRule (line 214) | class ModelButtonRule(metaclass=PoolMeta):
  class ModelButtonClick (line 219) | class ModelButtonClick(metaclass=PoolMeta):
  class RuleGroup (line 224) | class RuleGroup(metaclass=PoolMeta):
  class RuleGroupGroup (line 231) | class RuleGroupGroup(ModelSQL):
  class SequenceType (line 240) | class SequenceType(metaclass=PoolMeta):
  class SequenceTypeGroup (line 247) | class SequenceTypeGroup(ModelSQL):
    method delete (line 256) | def delete(cls, records):
    method create (line 263) | def create(cls, vlist):
    method write (line 271) | def write(cls, records, values, *args):
  class Export (line 278) | class Export(metaclass=PoolMeta):
  class Export_Group (line 297) | class Export_Group(ModelSQL):
  class Export_Write_Group (line 307) | class Export_Write_Group(Export_Group):

FILE: trytond/res/routes.py
  function user_application (line 22) | def user_application(request, pool):

FILE: trytond/res/user.py
  function gen_password (line 79) | def gen_password(length=8):
  function _send_email (line 89) | def _send_email(from_, users, email_func):
  class PasswordError (line 102) | class PasswordError(UserError):
  class DeleteError (line 106) | class DeleteError(UserError):
  class User (line 110) | class User(avatar_mixin(100, 'login'), DeactivableMixin, ModelSQL, Model...
    method __setup__ (line 161) | def __setup__(cls):
    method __register__ (line 202) | def __register__(cls, module_name):
    method default_menu (line 232) | def default_menu():
    method get_pyson_menu (line 242) | def get_pyson_menu(self, name):
    method get_language_direction (line 246) | def get_language_direction(self, name):
    method get_status_bar (line 254) | def get_status_bar(self, name):
    method get_avatar_badge_url (line 257) | def get_avatar_badge_url(self, name):
    method get_password (line 260) | def get_password(self, name):
    method set_password (line 264) | def set_password(cls, users, name, value):
    method validate_password (line 279) | def validate_password(cls, password, users):
    method reset_password (line 308) | def reset_password(cls, users, length=8, from_=None):
    method get_email_reset_password (line 318) | def get_email_reset_password(self):
    method languages (line 323) | def languages(self):
    method get_sessions (line 335) | def get_sessions(users, name):
    method _convert_vals (line 356) | def _convert_vals(vals):
    method read (line 365) | def read(cls, ids, fields_names):
    method create (line 373) | def create(cls, vlist):
    method write (line 378) | def write(cls, users, values, *args):
    method delete (line 419) | def delete(cls, users):
    method get_rec_name (line 422) | def get_rec_name(self, name):
    method search_rec_name (line 426) | def search_rec_name(cls, name, clause):
    method copy (line 437) | def copy(cls, users, default=None):
    method _get_preferences (line 454) | def _get_preferences(cls, user, context_only=False):
    method get_preferences (line 527) | def get_preferences(cls, context_only=False):
    method set_preferences (line 533) | def set_preferences(cls, values):
    method get_preferences_fields_view (line 563) | def get_preferences_fields_view(cls):
    method get_groups (line 609) | def get_groups(cls, name=None):
    method _get_login (line 629) | def _get_login(cls, login):
    method get_login (line 642) | def get_login(cls, login, parameters):
    method _check_login_options (line 691) | def _check_login_options(cls, options, login, parameters):
    method _check_login_options_ip_address (line 704) | def _check_login_options_ip_address(cls, login, parameters):
    method _check_login_options_device_cookie (line 718) | def _check_login_options_device_cookie(cls, login, parameters):
    method _login_password (line 722) | def _login_password(cls, login, parameters):
    method hash_password (line 744) | def hash_password(cls, password):
    method check_password (line 752) | def check_password(cls, password, hash_):
    method hash_sha1 (line 770) | def hash_sha1(cls, password):
    method check_sha1 (line 779) | def check_sha1(cls, password, hash_):
    method hash_bcrypt (line 790) | def hash_bcrypt(cls, password):
    method check_bcrypt (line 797) | def check_bcrypt(cls, password, hash_):
  class LoginAttempt (line 807) | class LoginAttempt(ModelSQL):
    method delay (line 820) | def delay():
    method ipaddress (line 825) | def ipaddress(cls):
    method _login_size (line 839) | def _login_size(func):
    method add (line 847) | def add(cls, login, device_cookie=None):
    method remove (line 862) | def remove(cls, login, device_cookie=None):
    method count (line 872) | def count(cls, login, device_cookie=None):
    method count_ip (line 882) | def count_ip(cls):
  class UserDevice (line 894) | class UserDevice(ModelSQL):
    method __setup__ (line 902) | def __setup__(cls):
    method get_valid_cookie (line 909) | def get_valid_cookie(cls, login, cookie):
    method renew (line 921) | def renew(cls, current_cookie):
    method clear (line 943) | def clear(cls, logins):
  class UserAction (line 950) | class UserAction(ModelSQL):
    method _convert_values (line 959) | def _convert_values(values):
    method create (line 968) | def create(cls, vlist):
    method write (line 973) | def write(cls, records, values, *args):
  class UserGroup (line 981) | class UserGroup(ModelSQL):
    method create (line 990) | def create(cls, vlist):
    method write (line 1004) | def write(cls, groups, values, *args):
    method delete (line 1017) | def delete(cls, groups):
    method user_group_all_table (line 1030) | def user_group_all_table(cls):
  class Warning_ (line 1046) | class Warning_(ModelSQL, ModelView):
    method format (line 1055) | def format(cls, name, records):
    method check (line 1060) | def check(cls, warning_name):
  class UserApplication (line 1080) | class UserApplication(Workflow, ModelSQL, ModelView):
    method __setup__ (line 1095) | def __setup__(cls):
    method default_key (line 1130) | def default_key(cls):
    method default_state (line 1134) | def default_state(cls):
    method validate_ (line 1140) | def validate_(cls, applications):
    method cancel (line 1146) | def cancel(cls, applications):
    method count (line 1150) | def count(cls, user_id):
    method check (line 1157) | def check(cls, key, application):
    method create (line 1169) | def create(cls, vlist):
  class EmailResetPassword (line 1179) | class EmailResetPassword(Report):
    method get_context (line 1183) | def get_context(cls, records, header, data):
  class UserConfigStart (line 1198) | class UserConfigStart(ModelView):
  class UserConfig (line 1203) | class UserConfig(Wizard):
    method transition_add (line 1219) | def transition_add(self):

FILE: trytond/rpc.py
  class RPC (line 11) | class RPC(object):
    method __init__ (line 25) | def __init__(self, readonly=True, instantiate=None, result=None,
    method convert (line 41) | def convert(self, obj, *args, **kwargs):
  class RPCCache (line 88) | class RPCCache:
    method __init__ (line 91) | def __init__(self, days=0, seconds=0):
    method headers (line 94) | def headers(self):

FILE: trytond/security.py
  function _get_pool (line 14) | def _get_pool(dbname):
  function _get_remote_addr (line 22) | def _get_remote_addr(context):
  function login (line 27) | def login(dbname, loginname, parameters, cache=True, context=None):
  function logout (line 59) | def logout(dbname, user, session, context=None):
  function check (line 79) | def check(dbname, user, session, context=None):
  function check_timeout (line 107) | def check_timeout(dbname, user, session, context=None):
  function reset (line 127) | def reset(dbname, session, context):

FILE: trytond/sendmail.py
  function sendmail_transactional (line 20) | def sendmail_transactional(
  function sendmail (line 32) | def sendmail(from_addr, to_addrs, msg, server=None, strict=False):
  function send_test_email (line 71) | def send_test_email(to_addrs, server=None):
  function get_smtp_server (line 81) | def get_smtp_server(uri=None, strict=False):
  class SMTPDataManager (line 115) | class SMTPDataManager(object):
    method __init__ (line 117) | def __init__(self, uri=None, strict=False):
    method put (line 123) | def put(self, from_addr, to_addrs, msg):
    method __eq__ (line 127) | def __eq__(self, other):
    method abort (line 132) | def abort(self, trans):
    method tpc_begin (line 135) | def tpc_begin(self, trans):
    method commit (line 138) | def commit(self, trans):
    method tpc_vote (line 141) | def tpc_vote(self, trans):
    method tpc_finish (line 145) | def tpc_finish(self, trans):
    method tpc_abort (line 155) | def tpc_abort(self, trans):
    method _finish (line 160) | def _finish(self):

FILE: trytond/status.py
  function processing (line 25) | def processing(request):
  function log (line 35) | def log():
  function dump (line 51) | def dump(path):
  function dumper (line 69) | def dumper(path):
  function start (line 77) | def start(path):
  function listen (line 90) | def listen(path, callback=None):

FILE: trytond/tests/__init__.py
  function register (line 10) | def register():

FILE: trytond/tests/access.py
  class TestAccess (line 7) | class TestAccess(ModelSQL):
  class TestAccessRelate (line 20) | class TestAccessRelate(ModelSQL):
  class TestAccessModel (line 27) | class TestAccessModel(TestAccess):
    method __setup__ (line 33) | def __setup__(cls):
  function register (line 38) | def register(module):

FILE: trytond/tests/copy_.py
  class Copy (line 8) | class Copy(ModelSQL):
  class CopyOne2Many (line 14) | class CopyOne2Many(ModelSQL):
  class CopyOne2ManyTarget (line 22) | class CopyOne2ManyTarget(ModelSQL):
  class CopyOne2ManyReference (line 29) | class CopyOne2ManyReference(ModelSQL):
  class CopyOne2ManyReferenceTarget (line 37) | class CopyOne2ManyReferenceTarget(ModelSQL):
  class CopyMany2Many (line 47) | class CopyMany2Many(ModelSQL):
  class CopyMany2ManyTarget (line 55) | class CopyMany2ManyTarget(ModelSQL):
  class CopyMany2ManyRelation (line 61) | class CopyMany2ManyRelation(ModelSQL):
  class CopyMany2ManyReference (line 70) | class CopyMany2ManyReference(ModelSQL):
  class CopyMany2ManyReferenceTarget (line 78) | class CopyMany2ManyReferenceTarget(ModelSQL):
  class CopyMany2ManyReferenceRelation (line 84) | class CopyMany2ManyReferenceRelation(ModelSQL):
  class CopyBinary (line 96) | class CopyBinary(ModelSQL):
  class CopyAccess (line 104) | class CopyAccess(ModelSQL):
    method default_name (line 110) | def default_name(cls):
  class CopyTranslate (line 114) | class CopyTranslate(ModelSQL):
  function register (line 120) | def register(module):

FILE: trytond/tests/export_data.py
  class ExportDataTarget (line 8) | class ExportDataTarget(ModelSQL):
  class ExportData (line 14) | class ExportData(ModelSQL):
  class ExportDataTarget2 (line 43) | class ExportDataTarget2(metaclass=PoolMeta):
  class ExportDataRelation (line 49) | class ExportDataRelation(ModelSQL):
  function register (line 56) | def register(module):

FILE: trytond/tests/field_binary.py
  class Binary (line 8) | class Binary(ModelSQL):
  class BinaryDefault (line 14) | class BinaryDefault(ModelSQL):
    method default_binary (line 20) | def default_binary():
  class BinaryRequired (line 24) | class BinaryRequired(ModelSQL):
  class BinaryFileStorage (line 30) | class BinaryFileStorage(ModelSQL):
  function register (line 37) | def register(module):

FILE: trytond/tests/field_boolean.py
  class Boolean (line 8) | class Boolean(ModelSQL):
  class BooleanDefault (line 14) | class BooleanDefault(ModelSQL):
    method default_boolean (line 20) | def default_boolean():
  function register (line 24) | def register(module):

FILE: trytond/tests/field_char.py
  class Char (line 9) | class Char(ModelSQL):
  class CharDefault (line 18) | class CharDefault(ModelSQL):
    method default_char (line 24) | def default_char():
  class CharRequired (line 28) | class CharRequired(ModelSQL):
  class CharSize (line 34) | class CharSize(ModelSQL):
  class CharSizePYSON (line 40) | class CharSizePYSON(ModelSQL):
  class CharTranslate (line 49) | class CharTranslate(ModelSQL):
  class CharUnaccentedOn (line 58) | class CharUnaccentedOn(ModelSQL):
  class CharUnaccentedOff (line 64) | class CharUnaccentedOff(ModelSQL):
    method __setup__ (line 70) | def __setup__(cls):
  class CharUnaccentedTranslate (line 75) | class CharUnaccentedTranslate(ModelSQL):
  function register (line 81) | def register(module):

FILE: trytond/tests/field_context.py
  class FieldContextParent (line 9) | class FieldContextParent(ModelSQL):
  class FieldContextChild (line 21) | class FieldContextChild(ModelSQL):
  function register (line 26) | def register(module):

FILE: trytond/tests/field_date.py
  class Date (line 10) | class Date(ModelSQL):
  class DateDefault (line 17) | class DateDefault(ModelSQL):
    method default_date (line 24) | def default_date():
  class DateRequired (line 28) | class DateRequired(ModelSQL):
  function register (line 35) | def register(module):

FILE: trytond/tests/field_datetime.py
  class DateTime (line 10) | class DateTime(ModelSQL):
  class DateTimeDefault (line 17) | class DateTimeDefault(ModelSQL):
    method default_datetime (line 24) | def default_datetime():
  class DateTimeRequired (line 28) | class DateTimeRequired(ModelSQL):
  class DateTimeFormat (line 35) | class DateTimeFormat(ModelSQL):
  function register (line 41) | def register(module):

FILE: trytond/tests/field_dict.py
  class DictSchema (line 8) | class DictSchema(DictSchemaMixin, ModelSQL):
  class Dict (line 13) | class Dict(ModelSQL):
  class DictDefault (line 21) | class DictDefault(ModelSQL):
    method default_dico (line 27) | def default_dico():
  class DictRequired (line 31) | class DictRequired(ModelSQL):
  class DictText (line 37) | class DictText(ModelSQL):
  class DictNoSchema (line 44) | class DictNoSchema(ModelSQL):
  class DictUnaccentedOn (line 50) | class DictUnaccentedOn(ModelSQL):
  class DictUnaccentedOff (line 56) | class DictUnaccentedOff(ModelSQL):
    method __setup__ (line 62) | def __setup__(cls):
  function register (line 67) | def register(module):

FILE: trytond/tests/field_float.py
  class Float (line 9) | class Float(ModelSQL):
  class FloatDefault (line 16) | class FloatDefault(ModelSQL):
    method default_float (line 23) | def default_float():
  class FloatRequired (line 27) | class FloatRequired(ModelSQL):
  class FloatDigits (line 34) | class FloatDigits(ModelSQL):
  function register (line 43) | def register(module):

FILE: trytond/tests/field_function.py
  class FunctionAccessor (line 9) | class FunctionAccessor(ModelSQL):
    method on_change_with_function (line 19) | def on_change_with_function(self, name=None):
  class FunctionAccessorTarget (line 24) | class FunctionAccessorTarget(ModelSQL):
  class FunctionGetterContext (line 29) | class FunctionGetterContext(ModelSQL):
    method getter (line 40) | def getter(self, name):
  class FunctionGetterLocalCache (line 46) | class FunctionGetterLocalCache(ModelSQL):
    method get_function1 (line 55) | def get_function1(self, name):
    method get_function2 (line 58) | def get_function2(self, name):
    method index_get_field (line 62) | def index_get_field(cls, name):
  function register (line 69) | def register(module):

FILE: trytond/tests/field_integer.py
  class Integer (line 8) | class Integer(ModelSQL):
  class IntegerDefault (line 15) | class IntegerDefault(ModelSQL):
    method default_integer (line 22) | def default_integer():
  class IntegerRequired (line 26) | class IntegerRequired(ModelSQL):
  class IntegerDomain (line 33) | class IntegerDomain(ModelSQL):
  function register (line 39) | def register(module):

FILE: trytond/tests/field_many2many.py
  class Many2Many (line 9) | class Many2Many(ModelSQL):
  class Many2ManyTarget (line 16) | class Many2ManyTarget(ModelSQL):
  class Many2ManyRelation (line 22) | class Many2ManyRelation(ModelSQL):
  class Many2ManyRequired (line 29) | class Many2ManyRequired(ModelSQL):
  class Many2ManyRequiredTarget (line 36) | class Many2ManyRequiredTarget(ModelSQL):
  class Many2ManyRequiredRelation (line 42) | class Many2ManyRequiredRelation(ModelSQL):
  class Many2ManyReference (line 49) | class Many2ManyReference(ModelSQL):
  class Many2ManyReferenceTarget (line 56) | class Many2ManyReferenceTarget(ModelSQL):
  class Many2ManyReferenceRelation (line 62) | class Many2ManyReferenceRelation(ModelSQL):
  class Many2ManySize (line 73) | class Many2ManySize(ModelSQL):
  class Many2ManySizeTarget (line 80) | class Many2ManySizeTarget(ModelSQL):
  class Many2ManySizeRelation (line 86) | class Many2ManySizeRelation(ModelSQL):
  class Many2ManyFilter (line 93) | class Many2ManyFilter(ModelSQL):
  class Many2ManyFilterTarget (line 106) | class Many2ManyFilterTarget(ModelSQL):
  class Many2ManyFilterRelation (line 112) | class Many2ManyFilterRelation(ModelSQL):
  class Many2ManyFilterDomain (line 119) | class Many2ManyFilterDomain(ModelSQL):
  class Many2ManyFilterDomainTarget (line 129) | class Many2ManyFilterDomainTarget(ModelSQL):
  class Many2ManyFilterDomainRelation (line 135) | class Many2ManyFilterDomainRelation(ModelSQL):
  class Many2ManyTree (line 142) | class Many2ManyTree(ModelSQL):
  class Many2ManyTreeRelation (line 151) | class Many2ManyTreeRelation(ModelSQL):
  class Many2ManyContext (line 158) | class Many2ManyContext(ModelSQL):
  class Many2ManyContextRelation (line 166) | class Many2ManyContextRelation(ModelSQL):
  class Many2ManyContextTarget (line 173) | class Many2ManyContextTarget(ModelSQL):
    method get_context (line 178) | def get_context(self, name):
  function register (line 183) | def register(module):

FILE: trytond/tests/field_many2one.py
  class Many2OneTarget (line 9) | class Many2OneTarget(DeactivableMixin, ModelSQL):
  class Many2One (line 17) | class Many2One(ModelSQL):
  class Many2OneDomainValidation (line 23) | class Many2OneDomainValidation(ModelSQL):
  class Many2OneNoForeignKey (line 34) | class Many2OneNoForeignKey(ModelSQL):
  class Many2OneTargetStorage (line 40) | class Many2OneTargetStorage(ModelStorage):
  class Many2OneTree (line 45) | class Many2OneTree(ModelSQL):
  class Many2OneMPTT (line 51) | class Many2OneMPTT(ModelSQL):
    method default_left (line 60) | def default_left(cls):
    method default_right (line 64) | def default_right(cls):
  class Many2OnePath (line 68) | class Many2OnePath(ModelSQL):
  class Many2OneContext (line 75) | class Many2OneContext(ModelSQL):
  class Many2OneTargetContext (line 83) | class Many2OneTargetContext(ModelSQL):
    method get_context (line 88) | def get_context(self, name):
  function register (line 93) | def register(module):

FILE: trytond/tests/field_multiselection.py
  class MultiSelection (line 8) | class MultiSelection(ModelSQL):
    method get_dyn_selection (line 23) | def get_dyn_selection(self):
    method get_static_selection (line 30) | def get_static_selection(cls):
  class MultiSelectionRequired (line 34) | class MultiSelectionRequired(ModelSQL):
  function register (line 41) | def register(module):

FILE: trytond/tests/field_numeric.py
  class Numeric (line 11) | class Numeric(ModelSQL):
  class NumericDefault (line 18) | class NumericDefault(ModelSQL):
    method default_numeric (line 25) | def default_numeric():
  class NumericRequired (line 29) | class NumericRequired(ModelSQL):
  class NumericDigits (line 36) | class NumericDigits(ModelSQL):
  function register (line 45) | def register(module):

FILE: trytond/tests/field_one2many.py
  class One2Many (line 10) | class One2Many(ModelSQL):
  class One2ManyTarget (line 16) | class One2ManyTarget(ModelSQL):
  class One2ManyRequired (line 23) | class One2ManyRequired(ModelSQL):
  class One2ManyRequiredTarget (line 30) | class One2ManyRequiredTarget(ModelSQL):
  class One2ManyReference (line 37) | class One2ManyReference(ModelSQL):
  class One2ManyReferenceTarget (line 44) | class One2ManyReferenceTarget(ModelSQL):
  class One2ManySize (line 54) | class One2ManySize(ModelSQL):
  class One2ManySizeTarget (line 61) | class One2ManySizeTarget(ModelSQL):
  class One2ManySizePYSON (line 67) | class One2ManySizePYSON(ModelSQL):
  class One2ManySizePYSONTarget (line 75) | class One2ManySizePYSONTarget(ModelSQL):
  class One2ManyFilter (line 81) | class One2ManyFilter(ModelSQL):
  class One2ManyFilterTarget (line 90) | class One2ManyFilterTarget(ModelSQL):
  class One2ManyFilterDomain (line 97) | class One2ManyFilterDomain(ModelSQL):
  class One2ManyFilterDomainTarget (line 107) | class One2ManyFilterDomainTarget(ModelSQL):
  class One2ManyContext (line 114) | class One2ManyContext(ModelSQL):
  class One2ManyContextTarget (line 122) | class One2ManyContextTarget(ModelSQL):
    method get_context (line 128) | def get_context(self, name):
  function register (line 133) | def register(module):

FILE: trytond/tests/field_one2one.py
  class One2One (line 8) | class One2One(ModelSQL):
  class One2OneTarget (line 15) | class One2OneTarget(ModelSQL):
  class One2OneRelation (line 21) | class One2OneRelation(ModelSQL):
    method __setup__ (line 28) | def __setup__(cls):
  class One2OneRequired (line 39) | class One2OneRequired(ModelSQL):
  class One2OneRequiredRelation (line 46) | class One2OneRequiredRelation(ModelSQL):
    method __setup__ (line 53) | def __setup__(cls):
  class One2OneDomain (line 64) | class One2OneDomain(ModelSQL):
  class One2OneDomainRelation (line 72) | class One2OneDomainRelation(ModelSQL):
    method __setup__ (line 79) | def __setup__(cls):
  function register (line 90) | def register(module):

FILE: trytond/tests/field_reference.py
  class Reference (line 10) | class Reference(ModelSQL):
  class ReferenceTarget (line 19) | class ReferenceTarget(ModelSQL):
  class ReferenceRequired (line 25) | class ReferenceRequired(ModelSQL):
  class ReferenceContext (line 34) | class ReferenceContext(ModelSQL):
  class ReferenceContextTarget (line 43) | class ReferenceContextTarget(ModelSQL):
    method get_context (line 48) | def get_context(self, name):
  class ReferenceDomainValidation (line 53) | class ReferenceDomainValidation(ModelSQL):
  class ReferenceDomainValidationTarget (line 68) | class ReferenceDomainValidationTarget(ModelSQL):
  class ReferenceDomainValidationPYSON (line 74) | class ReferenceDomainValidationPYSON(ModelSQL):
  function register (line 91) | def register(module):

FILE: trytond/tests/field_selection.py
  class Selection (line 8) | class Selection(ModelSQL):
    method get_selection (line 30) | def get_selection(self):
    method static_selection (line 37) | def static_selection():
  class SelectionRequired (line 41) | class SelectionRequired(ModelSQL):
  class SelectionLabel (line 48) | class SelectionLabel(ModelSQL):
  function register (line 58) | def register(module):

FILE: trytond/tests/field_text.py
  class Text (line 8) | class Text(ModelSQL):
  class TextDefault (line 15) | class TextDefault(ModelSQL):
    method default_text (line 22) | def default_text():
  class TextRequired (line 26) | class TextRequired(ModelSQL):
  class TextSize (line 33) | class TextSize(ModelSQL):
  class TextTranslate (line 40) | class TextTranslate(ModelSQL):
  class FullText (line 47) | class FullText(ModelSQL):
  function register (line 53) | def register(module):

FILE: trytond/tests/field_time.py
  class Time (line 10) | class Time(ModelSQL):
  class TimeDefault (line 16) | class TimeDefault(ModelSQL):
    method default_time (line 22) | def default_time():
  class TimeRequired (line 26) | class TimeRequired(ModelSQL):
  class TimeFormat (line 32) | class TimeFormat(ModelSQL):
  class TimePrecision (line 38) | class TimePrecision(ModelSQL):
  function register (line 44) | def register(module):

FILE: trytond/tests/field_timedelta.py
  class TimeDelta (line 10) | class TimeDelta(ModelSQL):
  class TimeDeltaDefault (line 17) | class TimeDeltaDefault(ModelSQL):
    method default_timedelta (line 24) | def default_timedelta():
  class TimeDeltaRequired (line 28) | class TimeDeltaRequired(ModelSQL):
  function register (line 35) | def register(module):

FILE: trytond/tests/history.py
  class TestHistory (line 7) | class TestHistory(ModelSQL):
  class TestHistoryLine (line 19) | class TestHistoryLine(ModelSQL):
  function register (line 27) | def register(module):

FILE: trytond/tests/import_data.py
  class ImportDataBoolean (line 8) | class ImportDataBoolean(ModelSQL):
  class ImportDataInteger (line 14) | class ImportDataInteger(ModelSQL):
  class ImportDataFloat (line 20) | class ImportDataFloat(ModelSQL):
  class ImportDataNumeric (line 26) | class ImportDataNumeric(ModelSQL):
  class ImportDataChar (line 32) | class ImportDataChar(ModelSQL):
  class ImportDataText (line 38) | class ImportDataText(ModelSQL):
  class ImportDataDate (line 44) | class ImportDataDate(ModelSQL):
  class ImportDataDateTime (line 50) | class ImportDataDateTime(ModelSQL):
  class ImportDataTimeDelta (line 56) | class ImportDataTimeDelta(ModelSQL):
  class ImportDataSelection (line 62) | class ImportDataSelection(ModelSQL):
  class ImportDataMany2OneTarget (line 72) | class ImportDataMany2OneTarget(ModelSQL):
  class ImportDataMany2One (line 78) | class ImportDataMany2One(ModelSQL):
  class ImportDataMany2ManyTarget (line 85) | class ImportDataMany2ManyTarget(ModelSQL):
  class ImportDataMany2Many (line 91) | class ImportDataMany2Many(ModelSQL):
  class ImportDataMany2ManyRelation (line 98) | class ImportDataMany2ManyRelation(ModelSQL):
  class ImportDataOne2Many (line 105) | class ImportDataOne2Many(ModelSQL):
  class ImportDataOne2ManyTarget (line 113) | class ImportDataOne2ManyTarget(ModelSQL):
  class ImportDataOne2Manies (line 120) | class ImportDataOne2Manies(ModelSQL):
  class ImportDataOne2Many1Target (line 130) | class ImportDataOne2Many1Target(ModelSQL):
  class ImportDataOne2Many2Target (line 137) | class ImportDataOne2Many2Target(ModelSQL):
  class ImportDataBinary (line 144) | class ImportDataBinary(ModelSQL):
  class ImportDataReferenceSelection (line 150) | class ImportDataReferenceSelection(ModelSQL):
  class ImportDataReference (line 156) | class ImportDataReference(ModelSQL):
  class ImportDataUpdate (line 165) | class ImportDataUpdate(ModelSQL):
  function register (line 171) | def register(module):

FILE: trytond/tests/mixin.py
  class TestMixin (line 8) | class TestMixin:
  class TestSecondMixin (line 12) | class TestSecondMixin:
  class NotMixin (line 16) | class NotMixin:
  class ReportMixin (line 20) | class ReportMixin:
  class DeactivableModelView (line 24) | class DeactivableModelView(DeactivableMixin, ModelView):
  class DeactivableModelSQL (line 29) | class DeactivableModelSQL(DeactivableMixin, ModelSQL):
  function register (line 34) | def register(module):

FILE: trytond/tests/model.py
  class Model (line 9) | class Model(ModelSQL):
  class ModelParent (line 15) | class ModelParent(Model):
  class ModelChild (line 21) | class ModelChild(Model):
  class ModelChildChild (line 28) | class ModelChildChild(Model):
  class ModelContext (line 35) | class ModelContext(Model):
  class ModelContextParent (line 46) | class ModelContextParent(Model):
  class Singleton (line 57) | class Singleton(ModelSingleton, ModelSQL):
    method default_name (line 63) | def default_name():
  class URLObject (line 67) | class URLObject(ModelSQL):
  class Model4Union1 (line 73) | class Model4Union1(ModelSQL):
  class Model4Union2 (line 80) | class Model4Union2(ModelSQL):
  class Model4Union3 (line 86) | class Model4Union3(ModelSQL):
  class Model4Union4 (line 92) | class Model4Union4(ModelSQL):
  class Union (line 98) | class Union(UnionMixin, ModelSQL):
    method union_models (line 105) | def union_models():
  class UnionUnion (line 109) | class UnionUnion(UnionMixin, ModelSQL):
    method union_models (line 115) | def union_models():
  class Model4UnionTree1 (line 119) | class Model4UnionTree1(ModelSQL):
  class Model4UnionTree2 (line 125) | class Model4UnionTree2(ModelSQL):
  class UnionTree (line 132) | class UnionTree(UnionMixin, ModelSQL):
    method union_models (line 140) | def union_models():
  class SequenceOrderedModel (line 144) | class SequenceOrderedModel(sequence_ordered(), ModelSQL):
  function register (line 149) | def register(module):

FILE: trytond/tests/modelsql.py
  class ModelSQLRead (line 12) | class ModelSQLRead(ModelSQL):
  class ModelSQLReadTarget (line 22) | class ModelSQLReadTarget(ModelSQL):
  class ModelSQLReadContextID (line 30) | class ModelSQLReadContextID(ModelSQL):
  class ModelSQLRequiredField (line 38) | class ModelSQLRequiredField(ModelSQL):
  class ModelSQLTimestamp (line 46) | class ModelSQLTimestamp(ModelSQL):
  class ModelSQLFieldSet (line 51) | class ModelSQLFieldSet(ModelSQL):
    method get_field (line 58) | def get_field(self, name=None):
    method set_field (line 62) | def set_field(cls, records, name, value):
  class ModelSQLOne2Many (line 66) | class ModelSQLOne2Many(ModelSQL):
  class ModelSQLOne2ManyTarget (line 73) | class ModelSQLOne2ManyTarget(ModelSQL):
  class ModelSQLSearch (line 80) | class ModelSQLSearch(ModelSQL):
  class ModelSQLSearchOR2Union (line 86) | class ModelSQLSearchOR2Union(ModelSQL):
    method order_integer (line 102) | def order_integer(cls, tables):
  class ModelSQLSearchOR2UnionTarget (line 107) | class ModelSQLSearchOR2UnionTarget(ModelSQL):
  class ModelSQLSearchOR2UnionOrder (line 114) | class ModelSQLSearchOR2UnionOrder(ModelSQL):
    method __setup__ (line 127) | def __setup__(cls):
  class ModelSQLSearchOR2UnionOrderTarget (line 132) | class ModelSQLSearchOR2UnionOrderTarget(ModelSQL):
  class ModelSQLForeignKey (line 140) | class ModelSQLForeignKey(DeactivableMixin, ModelSQL):
  class ModelSQLForeignKeyTarget (line 152) | class ModelSQLForeignKeyTarget(ModelSQL):
  class NullOrder (line 157) | class NullOrder(ModelSQL):
  class ModelTranslation (line 163) | class ModelTranslation(ModelSQL):
  class ModelCheck (line 169) | class ModelCheck(ModelSQL):
    method __setup__ (line 175) | def __setup__(cls):
  class ModelUnique (line 184) | class ModelUnique(ModelSQL):
    method __setup__ (line 190) | def __setup__(cls):
  class ModelExclude (line 198) | class ModelExclude(ModelSQL):
    method default_condition (line 205) | def default_condition(cls):
    method __setup__ (line 209) | def __setup__(cls):
  class ModelLock (line 219) | class ModelLock(ModelSQL):
  function register (line 224) | def register(module):

FILE: trytond/tests/modelstorage.py
  class ModelStorage (line 11) | class ModelStorage(ModelSQL):
  class ModelStorageRequired (line 17) | class ModelStorageRequired(ModelSQL):
  class ModelStorageSave2Many (line 23) | class ModelStorageSave2Many(ModelSQL):
  class ModelStorageSave2ManyTarget (line 32) | class ModelStorageSave2ManyTarget(ModelSQL):
  class ModelStorageSave2ManyRelation (line 38) | class ModelStorageSave2ManyRelation(ModelSQL):
  class ModelStorageContext (line 45) | class ModelStorageContext(ModelSQL):
    method get_context (line 50) | def get_context(self, name):
  class ModelStoragePYSONDomain (line 54) | class ModelStoragePYSONDomain(ModelSQL):
  class ModelStorageRelationDomain (line 66) | class ModelStorageRelationDomain(ModelSQL):
  class ModelStorageRelationDomainTarget (line 104) | class ModelStorageRelationDomainTarget(ModelSQL):
    method get_valid (line 111) | def get_valid(self, name):
    method search_valid (line 115) | def search_valid(cls, name, domain):
  class ModelStorageRelationMultiDomain (line 122) | class ModelStorageRelationMultiDomain(ModelSQL):
  class ModelStorageRelationMultiDomainTarget (line 133) | class ModelStorageRelationMultiDomainTarget(ModelSQL):
  class ModelStorageRelationDomain2 (line 140) | class ModelStorageRelationDomain2(ModelSQL):
  class ModelStorageRelationDomain2Target (line 150) | class ModelStorageRelationDomain2Target(ModelSQL):
  class ModelStorageEvalEnvironment (line 157) | class ModelStorageEvalEnvironment(ModelStorage_):
  function register (line 175) | def register(module):

FILE: trytond/tests/modelview.py
  class ModelViewChangedValues (line 9) | class ModelViewChangedValues(ModelView):
  class ModelViewChangedValuesDictSchema (line 30) | class ModelViewChangedValuesDictSchema(DictSchemaMixin, ModelSQL):
  class ModelViewChangedValuesTarget (line 35) | class ModelViewChangedValuesTarget(ModelView):
  class ModelViewChangedValuesStoredTarget (line 42) | class ModelViewChangedValuesStoredTarget(ModelSQL):
  class ModelViewStoredChangedValues (line 48) | class ModelViewStoredChangedValues(ModelSQL, ModelView):
  class ModelViewStoredChangedValuesTarget (line 55) | class ModelViewStoredChangedValuesTarget(ModelSQL, ModelView):
  class ModelViewButton (line 62) | class ModelViewButton(ModelView):
    method __setup__ (line 68) | def __setup__(cls):
    method test (line 76) | def test(cls, records):
    method test_non_decorated (line 80) | def test_non_decorated(cls, records):
  class ModelViewButtonDepends (line 84) | class ModelViewButtonDepends(ModelView):
    method __setup__ (line 90) | def __setup__(cls):
    method test (line 100) | def test(cls, records):
  class ModelViewButtonAction (line 104) | class ModelViewButtonAction(ModelView):
    method __setup__ (line 109) | def __setup__(cls):
    method test (line 117) | def test(cls, records):
    method test_update (line 122) | def test_update(cls, records):
  class ModelViewButtonChange (line 126) | class ModelViewButtonChange(ModelView):
    method __setup__ (line 134) | def __setup__(cls):
    method test (line 141) | def test(self):
    method extra_method (line 145) | def extra_method(self):
  class ModelViewLink (line 149) | class ModelViewLink(ModelView):
  class ModelViewLinkTarget (line 154) | class ModelViewLinkTarget(ModelSQL):
  class ModelViewRPC (line 159) | class ModelViewRPC(ModelView):
    method on_change_with_integer (line 183) | def on_change_with_integer(self):
    method on_change_float (line 187) | def on_change_float(self):
    method autocomplete_char (line 191) | def autocomplete_char(self):
    method get_selection (line 195) | def get_selection(cls):
    method get_function_selection (line 199) | def get_function_selection(cls):
    method get_reference (line 203) | def get_reference(cls):
    method get_function_reference (line 207) | def get_function_reference(cls):
  class ModelViewEmptyPage (line 211) | class ModelViewEmptyPage(ModelView):
  class ModelViewCircularDepends (line 216) | class ModelViewCircularDepends(ModelView):
  class ModeViewDependsDepends (line 225) | class ModeViewDependsDepends(ModelView):
  class ModelViewViewAttributes (line 234) | class ModelViewViewAttributes(ModelView):
    method view_attributes (line 241) | def view_attributes(cls):
  class ModelViewViewAttributesDepends (line 248) | class ModelViewViewAttributesDepends(ModelView):
    method view_attributes (line 256) | def view_attributes(cls):
  class ModelViewStatesDepends (line 263) | class ModelViewStatesDepends(ModelView):
  function register (line 278) | def register(module):

FILE: trytond/tests/mptt.py
  class MPTT (line 11) | class MPTT(DeactivableMixin, tree(), ModelSQL, ModelView):
    method order_sequence (line 21) | def order_sequence(tables):
    method default_left (line 26) | def default_left():
    method default_right (line 30) | def default_right():
  function register (line 34) | def register(module):

FILE: trytond/tests/multivalue.py
  class ModelMultiValue (line 7) | class ModelMultiValue(ModelSQL, MultiValueMixin):
    method multivalue_model (line 30) | def multivalue_model(cls, field):
    method default_value (line 44) | def default_value(cls, **pattern):
    method default_value_default (line 48) | def default_value_default(cls, **pattern):
    method default_value_multiselection (line 52) | def default_value_multiselection(cls, **pattern):
  class ModelValue (line 56) | class ModelValue(ModelSQL, ValueMixin):
  class ModelMultiValueTarget (line 78) | class ModelMultiValueTarget(ModelSQL):
  function register (line 84) | def register(module):

FILE: trytond/tests/path.py
  class Path (line 7) | class Path(DeactivableMixin, tree(), ModelSQL):
  function register (line 16) | def register(module):

FILE: trytond/tests/resource.py
  class TestResource (line 8) | class TestResource(ModelSQL, NoteCopyMixin):
    method get_resources_to_copy (line 13) | def get_resources_to_copy(cls, name):
  class TestResourceOther (line 17) | class TestResourceOther(ModelSQL):
  function register (line 22) | def register(module):

FILE: trytond/tests/rule.py
  class TestRule (line 7) | class TestRule(ModelSQL):
  class TestRuleRelation (line 14) | class TestRuleRelation(ModelSQL):
  class TestRuleModel (line 20) | class TestRuleModel(ModelSQL):
    method __setup__ (line 29) | def __setup__(cls):
  function register (line 34) | def register(module):

FILE: trytond/tests/test_access.py
  class _ModelAccessTestCase (line 14) | class _ModelAccessTestCase(unittest.TestCase):
    method setUpClass (line 18) | def setUpClass(cls):
    method model (line 24) | def model(self):
    method group (line 31) | def group(self):
    method _assert (line 37) | def _assert(self, record):
    method _assert_raises (line 40) | def _assert_raises(self, record):
    method test_access_empty (line 44) | def test_access_empty(self):
    method test_access_without_group (line 53) | def test_access_without_group(self):
    method test_no_access_without_group (line 68) | def test_no_access_without_group(self):
    method test_one_access_with_groups (line 83) | def test_one_access_with_groups(self):
    method test_one_access_without_group (line 103) | def test_one_access_without_group(self):
    method test_all_access_with_groups (line 123) | def test_all_access_with_groups(self):
    method test_no_access_with_groups (line 143) | def test_no_access_with_groups(self):
    method test_one_access_with_group (line 163) | def test_one_access_with_group(self):
    method test_no_access_with_group (line 178) | def test_no_access_with_group(self):
    method test_one_access_with_other_group (line 193) | def test_one_access_with_other_group(self):
    method test_no_access_with_other_group (line 215) | def test_no_access_with_other_group(self):
    method test_one_access_with_other_group_no_perm (line 237) | def test_one_access_with_other_group_no_perm(self):
    method test_access_inherited_from_parent (line 259) | def test_access_inherited_from_parent(self):
  class ModelAccessReadTestCase (line 284) | class ModelAccessReadTestCase(_ModelAccessTestCase):
    method _assert (line 287) | def _assert(self, record):
    method _assert_raises (line 293) | def _assert_raises(self, record):
    method test_access_relate_empty (line 302) | def test_access_relate_empty(self):
    method test_access_relate (line 313) | def test_access_relate(self):
    method test_no_access_relate (line 334) | def test_no_access_relate(self):
  class ModelAccessWriteTestCase (line 358) | class ModelAccessWriteTestCase(_ModelAccessTestCase):
    method _assert (line 361) | def _assert(self, record):
    method _assert_raises (line 366) | def _assert_raises(self, record):
  class ModelAccessCreateTestCase (line 373) | class ModelAccessCreateTestCase(_ModelAccessTestCase):
    method _assert (line 376) | def _assert(self, record):
    method _assert_raises (line 381) | def _assert_raises(self, record):
  class ModelAccessDeleteTestCase (line 388) | class ModelAccessDeleteTestCase(_ModelAccessTestCase):
    method _assert (line 391) | def _assert(self, record):
    method _assert_raises (line 396) | def _assert_raises(self, record):
  class ModelAccessModelTestCase (line 403) | class ModelAccessModelTestCase(_ModelAccessTestCase):
    method _assert (line 407) | def _assert(self, record):
    method _assert_raises (line 413) | def _assert_raises(self, record):
  class _ModelFieldAccessTestCase (line 422) | class _ModelFieldAccessTestCase(unittest.TestCase):
    method setUpClass (line 426) | def setUpClass(cls):
    method _field (line 429) | def _field(self, name):
    method field1 (line 439) | def field1(self):
    method field2 (line 443) | def field2(self):
    method group (line 447) | def group(self):
    method _assert1 (line 453) | def _assert1(self, record):
    method _assert2 (line 456) | def _assert2(self, record):
    method _assert_raises1 (line 459) | def _assert_raises1(self, record):
    method _assert_raises2 (line 462) | def _assert_raises2(self, record):
    method test_access_empty (line 466) | def test_access_empty(self):
    method test_access_without_group (line 476) | def test_access_without_group(self):
    method test_no_access_without_group (line 492) | def test_no_access_without_group(self):
    method test_one_access_with_groups (line 508) | def test_one_access_with_groups(self):
    method test_one_access_without_group (line 529) | def test_one_access_without_group(self):
    method test_all_access_with_groups (line 550) | def test_all_access_with_groups(self):
    method test_no_access_with_groups (line 571) | def test_no_access_with_groups(self):
    method test_one_access_with_group (line 592) | def test_one_access_with_group(self):
    method test_no_access_with_group (line 608) | def test_no_access_with_group(self):
    method test_one_access_with_other_group (line 624) | def test_one_access_with_other_group(self):
    method test_no_access_with_other_group (line 647) | def test_no_access_with_other_group(self):
    method test_one_access_with_other_group_no_perm (line 670) | def test_one_access_with_other_group_no_perm(self):
    method test_access_inherited_from_parent (line 693) | def test_access_inherited_from_parent(self):
    method test_two_access (line 719) | def test_two_access(self):
    method test_two_no_access (line 742) | def test_two_no_access(self):
    method test_two_both_access (line 765) | def test_two_both_access(self):
    method test_two_access_with_group (line 788) | def test_two_access_with_group(self):
    method test_two_access_with_groups (line 811) | def test_two_access_with_groups(self):
    method test_two_no_access_with_group (line 834) | def test_two_no_access_with_group(self):
    method test_two_both_access_with_group (line 857) | def test_two_both_access_with_group(self):
  class ModelFieldAccessReadTestCase (line 880) | class ModelFieldAccessReadTestCase(_ModelFieldAccessTestCase):
    method _assert1 (line 883) | def _assert1(self, record):
    method _assert2 (line 889) | def _assert2(self, record):
    method _assert_raises1 (line 895) | def _assert_raises1(self, record):
    method _assert_raises2 (line 903) | def _assert_raises2(self, record):
    method test_access_search_relate_empty (line 912) | def test_access_search_relate_empty(self):
    method test_access_search_relate (line 921) | def test_access_search_relate(self):
    method test_no_access_search_relate (line 943) | def test_no_access_search_relate(self):
    method test_access_search_relate_parent_field (line 970) | def test_access_search_relate_parent_field(self):
    method test_no_access_search_relate_parent_field (line 988) | def test_no_access_search_relate_parent_field(self):
  class ModelFieldAccessWriteTestCase (line 1007) | class ModelFieldAccessWriteTestCase(_ModelFieldAccessTestCase):
    method _assert1 (line 1010) | def _assert1(self, record):
    method _assert2 (line 1015) | def _assert2(self, record):
    method _assert_raises1 (line 1020) | def _assert_raises1(self, record):
    method _assert_raises2 (line 1026) | def _assert_raises2(self, record):

FILE: trytond/tests/test_backend.py
  class BackendTestCase (line 14) | class BackendTestCase(unittest.TestCase):
    method setUpClass (line 18) | def setUpClass(cls):
    method test_current_timestamp_static_transaction (line 22) | def test_current_timestamp_static_transaction(self):
    method test_current_timestamp_reset_after_commit (line 35) | def test_current_timestamp_reset_after_commit(self):
    method test_current_timestamp_different_transaction (line 49) | def test_current_timestamp_different_transaction(self):
    method test_to_char_datetime (line 65) | def test_to_char_datetime(self):
    method test_to_char_date (line 77) | def test_to_char_date(self):
    method test_functions (line 89) | def test_functions(self):
    method test_function_random (line 142) | def test_function_random(self):
    method test_function_setseed (line 151) | def test_function_setseed(self):
    method test_function_date_trunc (line 157) | def test_function_date_trunc(self):

FILE: trytond/tests/test_bus.py
  class MessageQueueTestCase (line 15) | class MessageQueueTestCase(unittest.TestCase):
    method setUp (line 17) | def setUp(self):
    method _time (line 20) | def _time(self):
    method test_get_next (line 25) | def test_get_next(self):
    method test_get_next_channels (line 35) | def test_get_next_channels(self):
    method test_get_next_timeout_expired (line 46) | def test_get_next_timeout_expired(self):
    method test_get_next_message_id_missing (line 56) | def test_get_next_message_id_missing(self):
    method test_get_next_message_id_None (line 66) | def test_get_next_message_id_None(self):
  class BusTestCase (line 77) | class BusTestCase(unittest.TestCase):
    method setUpClass (line 81) | def setUpClass(cls):
    method setUp (line 85) | def setUp(self):
    method tearDown (line 98) | def tearDown(self):
    method test_notify (line 108) | def test_notify(self):
    method test_subscribe_nothing (line 113) | def test_subscribe_nothing(self):
    method test_subscribe_message (line 120) | def test_subscribe_message(self):

FILE: trytond/tests/test_cache.py
  class CacheTestCase (line 20) | class CacheTestCase(unittest.TestCase):
    method testFreeze (line 23) | def testFreeze(self):
    method testUnfreeze (line 45) | def testUnfreeze(self):
  class MemoryCacheTestCase (line 68) | class MemoryCacheTestCase(unittest.TestCase):
    method setUpClass (line 72) | def setUpClass(cls):
    method setUp (line 75) | def setUp(self):
    method tearDown (line 82) | def tearDown(self):
    method wait_cache_sync (line 85) | def wait_cache_sync(self, after=None):
    method test_memory_cache_set_get (line 89) | def test_memory_cache_set_get(self):
    method test_memory_cache_drop (line 96) | def test_memory_cache_drop(self):
    method test_memory_cache_transactions (line 103) | def test_memory_cache_transactions(self):
    method test_memory_cache_nested_transactions (line 128) | def test_memory_cache_nested_transactions(self):
    method test_memory_cache_sync (line 141) | def test_memory_cache_sync(self):
    method test_memory_cache_old_transaction (line 151) | def test_memory_cache_old_transaction(self):
    method test_memory_cache_expire (line 175) | def test_memory_cache_expire(self):
  class MemoryCacheChannelTestCase (line 184) | class MemoryCacheChannelTestCase(MemoryCacheTestCase):
    method setUp (line 187) | def setUp(self):
    method wait_cache_sync (line 194) | def wait_cache_sync(self, after=None):
    method test_memory_cache_sync (line 201) | def test_memory_cache_sync(self):
  class LRUDictTestCase (line 205) | class LRUDictTestCase(unittest.TestCase):
    method test_setitem (line 208) | def test_setitem(self):
    method test_update (line 218) | def test_update(self):
    method test_setdefault (line 229) | def test_setdefault(self):
    method test_default_factory (line 239) | def test_default_factory(self):
    method test_default_factory_with_key (line 247) | def test_default_factory_with_key(self):
  class LRUDictTransactionTestCase (line 254) | class LRUDictTransactionTestCase(unittest.TestCase):
    method setUpClass (line 258) | def setUpClass(cls):
    method test_init (line 262) | def test_init(self):
    method test_clear (line 269) | def test_clear(self):
    method test_refresh (line 279) | def test_refresh(self):

FILE: trytond/tests/test_copy.py
  class CopyTestCase (line 15) | class CopyTestCase(unittest.TestCase):
    method setUpClass (line 19) | def setUpClass(cls):
    method test_copy (line 23) | def test_copy(self):
    method test_copy_default (line 36) | def test_copy_default(self):
    method test_copy_default_callable (line 49) | def test_copy_default_callable(self):
    method test_one2many (line 66) | def test_one2many(self):
    method test_one2many_default (line 96) | def test_one2many_default(self):
    method test_one2many_default_nested (line 114) | def test_one2many_default_nested(self):
    method test_many2many (line 131) | def test_many2many(self):
    method test_many2many_default (line 161) | def test_many2many_default(self):
    method test_binary (line 178) | def test_binary(self):
    method test_binary_file_id (line 190) | def test_binary_file_id(self):
    method test_no_acccess_copy_with_custom_value (line 203) | def test_no_acccess_copy_with_custom_value(self):
    method test_no_acccess_copy_with_default (line 227) | def test_no_acccess_copy_with_default(self):
    method test_no_acccess_copy_with_defaults (line 251) | def test_no_acccess_copy_with_defaults(self):
  class CopyTranslationTestCase (line 276) | class CopyTranslationTestCase(TranslationTestCase):
    method test_copy (line 280) | def test_copy(self):
    method test_copy_multiple (line 300) | def test_copy_multiple(self):

FILE: trytond/tests/test_descriptors.py
  function load_tests (line 8) | def load_tests(loader, tests, pattern):

FILE: trytond/tests/test_exportdata.py
  class ExportDataTestCase (line 12) | class ExportDataTestCase(unittest.TestCase):
    method setUpClass (line 16) | def setUpClass(cls):
    method test_boolean (line 20) | def test_boolean(self):
    method test_integer (line 44) | def test_integer(self):
    method test_float (line 66) | def test_float(self):
    method test_numeric (line 88) | def test_numeric(self):
    method test_char (line 112) | def test_char(self):
    method test_text (line 134) | def test_text(self):
    method test_date (line 156) | def test_date(self):
    method test_datetime (line 178) | def test_datetime(self):
    method test_timedelta (line 202) | def test_timedelta(self):
    method test_selection (line 229) | def test_selection(self):
    method test_many2one (line 254) | def test_many2one(self):
    method test_many2many (line 283) | def test_many2many(self):
    method test_one2many (line 323) | def test_one2many(self):
    method test_reference (line 358) | def test_reference(self):
    method test_domain (line 392) | def test_domain(self):
    method test_header (line 409) | def test_header(self):
    method test_nested_header (line 423) | def test_nested_header(self):
    method test_header_domain (line 439) | def test_header_domain(self):

FILE: trytond/tests/test_field_binary.py
  class FieldBinaryTestCase (line 19) | class FieldBinaryTestCase(unittest.TestCase):
    method setUpClass (line 23) | def setUpClass(cls):
    method setUp (line 26) | def setUp(self):
    method test_create (line 34) | def test_create(self):
    method test_create_without_default (line 45) | def test_create_without_default(self):
    method test_create_with_default (line 54) | def test_create_with_default(self):
    method test_create_required_without_value (line 63) | def test_create_required_without_value(self):
    method test_create_required_with_value (line 71) | def test_create_required_with_value(self):
    method test_create_required_with_empty (line 82) | def test_create_required_with_empty(self):
    method test_create_filestorage (line 92) | def test_create_filestorage(self):
    method test_create_empty_filestorage (line 104) | def test_create_empty_filestorage(self):
    method test_create_with_sql_value (line 116) | def test_create_with_sql_value(self):
    method test_set_sql_value (line 127) | def test_set_sql_value(self):
    method test_read_size (line 137) | def test_read_size(self):
    method test_read_size_filestorage (line 150) | def test_read_size_filestorage(self):
    method test_write (line 164) | def test_write(self):
    method test_write_filestorage (line 178) | def test_write_filestorage(self):
    method test_write_empty_filestorage (line 192) | def test_write_empty_filestorage(self):

FILE: trytond/tests/test_field_boolean.py
  class FieldBooleanTestCase (line 11) | class FieldBooleanTestCase(unittest.TestCase):
    method setUpClass (line 15) | def setUpClass(cls):
    method test_create (line 19) | def test_create(self):
    method test_create_without_default (line 36) | def test_create_without_default(self):
    method test_create_with_default (line 45) | def test_create_with_default(self):
    method test_create_with_sql_value (line 54) | def test_create_with_sql_value(self):
    method test_set_sql_value (line 63) | def test_set_sql_value(self):
    method test_search_equals_true (line 73) | def test_search_equals_true(self):
    method test_search_equals_false (line 89) | def test_search_equals_false(self):
    method test_search_non_equals (line 105) | def test_search_non_equals(self):
    method test_search_in_true (line 118) | def test_search_in_true(self):
    method test_search_in_false (line 132) | def test_search_in_false(self):
    method test_search_not_in_true (line 146) | def test_search_not_in_true(self):
    method test_search_not_in_false (line 160) | def test_search_not_in_false(self):
    method test_search_in_true_false (line 174) | def test_search_in_true_false(self):
    method test_search_not_in_true_false (line 190) | def test_search_not_in_true_false(self):
    method test_search_equals_false_with_none (line 206) | def test_search_equals_false_with_none(self):
    method test_search_non_equals_false_with_none (line 219) | def test_search_non_equals_false_with_none(self):
    method test_write_false (line 232) | def test_write_false(self):
    method test_write_true (line 246) | def test_write_true(self):

FILE: trytond/tests/test_field_char.py
  class CommonTestCaseMixin (line 17) | class CommonTestCaseMixin:
    method test_create (line 20) | def test_create(self):
    method test_create_unicode (line 34) | def test_create_unicode(self):
    method test_search_equals (line 45) | def test_search_equals(self):
    method test_search_equals_none (line 63) | def test_search_equals_none(self):
    method test_search_equals_unicode (line 77) | def test_search_equals_unicode(self):
    method test_search_equals_non_unicode (line 91) | def test_search_equals_non_unicode(self):
    method test_search_non_equals (line 105) | def test_search_non_equals(self):
    method test_search_non_equals_none (line 123) | def test_search_non_equals_none(self):
    method test_search_in (line 137) | def test_search_in(self):
    method test_search_in_none (line 159) | def test_search_in_none(self):
    method test_search_not_in (line 173) | def test_search_not_in(self):
    method test_search_not_in_none (line 195) | def test_search_not_in_none(self):
    method test_search_like (line 209) | def test_search_like(self):
    method test_search_ilike (line 235) | def test_search_ilike(self):
    method test_search_not_like (line 261) | def test_search_not_like(self):
    method test_search_not_ilike (line 287) | def test_search_not_ilike(self):
    method test_write_unicode (line 313) | def test_write_unicode(self):
    method test_create_strip (line 327) | def test_create_strip(self):
    method test_write_strip (line 345) | def test_write_strip(self):
    method test_set_strip (line 369) | def test_set_strip(self):
  class FieldCharTestCase (line 385) | class FieldCharTestCase(unittest.TestCase, CommonTestCaseMixin):
    method setUpClass (line 389) | def setUpClass(cls):
    method Char (line 392) | def Char(self):
    method test_create_with_sql_value (line 396) | def test_create_with_sql_value(self):
    method test_set_sql_value (line 405) | def test_set_sql_value(self):
    method test_create_without_default (line 415) | def test_create_without_default(self):
    method test_create_with_default (line 424) | def test_create_with_default(self):
    method test_create_required_with_value (line 433) | def test_create_required_with_value(self):
    method test_create_required_without_value (line 444) | def test_create_required_without_value(self):
    method test_create_required_with_empty (line 452) | def test_create_required_with_empty(self):
    method test_create_size_valid (line 462) | def test_create_size_valid(self):
    method test_create_size_invalid (line 473) | def test_create_size_invalid(self):
    method test_create_size_pyson_valid (line 483) | def test_create_size_pyson_valid(self):
    method test_create_size_pyson_invalid (line 495) | def test_create_size_pyson_invalid(self):
    method test_create_size_pyson_none (line 506) | def test_create_size_pyson_none(self):
    method test_create_invalid_char (line 517) | def test_create_invalid_char(self):
    method test_write (line 527) | def test_write(self):
    method test_write_none (line 541) | def test_write_none(self):
    method test_write_size_invalid (line 555) | def test_write_size_invalid(self):
    method test_create_strip_with_sql_value (line 569) | def test_create_strip_with_sql_value(self):
    method test_write_strip_with_sql_value (line 587) | def test_write_strip_with_sql_value(self):
  class FieldCharTranslatedTestCase (line 611) | class FieldCharTranslatedTestCase(unittest.TestCase, CommonTestCaseMixin):
    method setUpClass (line 615) | def setUpClass(cls):
    method Char (line 618) | def Char(self):
    method test_create_with_sql_value (line 622) | def test_create_with_sql_value(self):
    method test_translation_default_language_cache (line 630) | def test_translation_default_language_cache(self):
  class FieldCharUnaccentedTestCase (line 650) | class FieldCharUnaccentedTestCase(ExtensionTestCase):
    method setUpClass (line 655) | def setUpClass(cls):
    method test_normal_search (line 660) | def test_normal_search(self):
    method test_accented_search (line 674) | def test_accented_search(self):
    method test_unaccented_search (line 688) | def test_unaccented_search(self):
    method test_unaccented_translated_search (line 701) | def test_unaccented_translated_search(self):
  class FieldCharSimilarityTestCase (line 730) | class FieldCharSimilarityTestCase(ExtensionTestCase):
    method setUpClass (line 735) | def setUpClass(cls):
    method _test_search (line 739) | def _test_search(self, Model):
    method test_search (line 752) | def test_search(self):
    method test_search_translated (line 758) | def test_search_translated(self):
    method _test_order (line 763) | def _test_order(self, Model):
    method test_order (line 777) | def test_order(self):
    method test_order_translated (line 783) | def test_order_translated(self):

FILE: trytond/tests/test_field_context.py
  class FieldContextTestCase (line 10) | class FieldContextTestCase(unittest.TestCase):
    method setUpClass (line 14) | def setUpClass(cls):
    method test_context (line 18) | def test_context(self):

FILE: trytond/tests/test_field_date.py
  class FieldDateTestCase (line 21) | class FieldDateTestCase(unittest.TestCase):
    method setUpClass (line 25) | def setUpClass(cls):
    method test_create (line 29) | def test_create(self):
    method test_create_date_string (line 43) | def test_create_date_string(self):
    method test_create_invalid_date_string (line 54) | def test_create_invalid_date_string(self):
    method test_create_without_default (line 64) | def test_create_without_default(self):
    method test_create_with_default (line 73) | def test_create_with_default(self):
    method test_create_with_sql_value (line 82) | def test_create_with_sql_value(self):
    method test_set_sql_value (line 91) | def test_set_sql_value(self):
    method test_create_non_date (line 101) | def test_create_non_date(self):
    method test_create_integer (line 111) | def test_create_integer(self):
    method test_create_datetime (line 121) | def test_create_datetime(self):
    method test_create_required_with_value (line 131) | def test_create_required_with_value(self):
    method test_create_required_without_value (line 142) | def test_create_required_without_value(self):
    method test_search_equals (line 150) | def test_search_equals(self):
    method test_search_equals_none (line 168) | def test_search_equals_none(self):
    method test_search_non_equals (line 182) | def test_search_non_equals(self):
    method test_search_non_equals_none (line 200) | def test_search_non_equals_none(self):
    method test_search_in (line 214) | def test_search_in(self):
    method test_search_in_none (line 236) | def test_search_in_none(self):
    method test_search_not_in (line 250) | def test_search_not_in(self):
    method test_search_not_in_none (line 272) | def test_search_not_in_none(self):
    method test_search_in_multi (line 286) | def test_search_in_multi(self):
    method test_search_not_in_multi (line 302) | def test_search_not_in_multi(self):
    method test_search_less (line 318) | def test_search_less(self):
    method test_search_less_equals (line 340) | def test_search_less_equals(self):
    method test_search_greater (line 362) | def test_search_greater(self):
    method test_search_greater_equals (line 384) | def test_search_greater_equals(self):
    method test_write (line 406) | def test_write(self):
    method test_write_non_date (line 420) | def test_write_non_date(self):
    method test_write_integer (line 433) | def test_write_integer(self):
    method test_write_datetime (line 446) | def test_write_datetime(self):
    method test_sql_cast_timezone (line 461) | def test_sql_cast_timezone(self):

FILE: trytond/tests/test_field_datetime.py
  class FieldDateTimeTestCase (line 19) | class FieldDateTimeTestCase(unittest.TestCase):
    method setUpClass (line 23) | def setUpClass(cls):
    method test_create (line 27) | def test_create(self):
    method test_create_datetime_string (line 41) | def test_create_datetime_string(self):
    method test_create_invalid_datetime_string (line 52) | def test_create_invalid_datetime_string(self):
    method test_create_without_default (line 62) | def test_create_without_default(self):
    method test_create_with_default (line 71) | def test_create_with_default(self):
    method test_create_with_sql_value (line 80) | def test_create_with_sql_value(self):
    method test_set_sql_value (line 91) | def test_set_sql_value(self):
    method test_create_non_datetime (line 101) | def test_create_non_datetime(
Condensed preview — 542 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,895K chars).
[
  {
    "path": ".drone.yml",
    "chars": 2199,
    "preview": "clone:\n    hg:\n        image: plugins/hg\n        environment:\n            - HG_SHARE_POOL=/root/.cache/hg\n        volume"
  },
  {
    "path": ".flake8",
    "chars": 46,
    "preview": "[flake8]\nignore=E123,E124,E126,E128,E741,W503\n"
  },
  {
    "path": ".hgtags",
    "chars": 1363,
    "preview": "951bb3311b916cb893adc5294cfb3216d2940169 1.0.0\n9f5ce178a7c403a0865fd4b6c1a82a911df0e998 1.2.0\ne2d31d59de7745de70199b7c34"
  },
  {
    "path": ".isort.cfg",
    "chars": 57,
    "preview": "[settings]\nmulti_line_output=4\nknown_first_party=trytond\n"
  },
  {
    "path": "CHANGELOG",
    "chars": 37095,
    "preview": "* Cache RPC call for class method selection\n\nVersion 6.6.0 - 2022-10-31\n--------------------------\n* Bug fixes (see merc"
  },
  {
    "path": "COPYRIGHT",
    "chars": 936,
    "preview": "Copyright (C) 2004-2008 Tiny SPRL.\nCopyright (C) 2007-2022 Cédric Krier.\nCopyright (C) 2007-2013 Bertrand Chenal.\nCopyri"
  },
  {
    "path": "LICENSE",
    "chars": 35147,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "MANIFEST.in",
    "chars": 204,
    "preview": "include CHANGELOG\ninclude COPYRIGHT\ninclude LICENSE\ninclude README.rst\ninclude doc/*\ninclude trytond/ir/ui/icons/LICENSE"
  },
  {
    "path": "README.rst",
    "chars": 195,
    "preview": "trytond\n=======\n\nThe server of Tryton.\nTryton is business software, ideal for companies of any size, easy to use,\ncomple"
  },
  {
    "path": "bin/trytond",
    "chars": 2888,
    "preview": "#!/usr/bin/env python3\n# PYTHON_ARGCOMPLETE_OK\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# "
  },
  {
    "path": "bin/trytond-admin",
    "chars": 807,
    "preview": "#!/usr/bin/env python3\n# PYTHON_ARGCOMPLETE_OK\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# "
  },
  {
    "path": "bin/trytond-console",
    "chars": 783,
    "preview": "#!/usr/bin/env python3\n# PYTHON_ARGCOMPLETE_OK\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# "
  },
  {
    "path": "bin/trytond-cron",
    "chars": 889,
    "preview": "#!/usr/bin/env python3\n# PYTHON_ARGCOMPLETE_OK\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# "
  },
  {
    "path": "bin/trytond-stat",
    "chars": 4882,
    "preview": "#!/usr/bin/env python3\n# PYTHON_ARGCOMPLETE_OK\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# "
  },
  {
    "path": "bin/trytond-worker",
    "chars": 898,
    "preview": "#!/usr/bin/env python3\n# PYTHON_ARGCOMPLETE_OK\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# "
  },
  {
    "path": "doc/conf.py",
    "chars": 1303,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "doc/index.rst",
    "chars": 1280,
    "preview": ".. _index:\n\n=============\nTryton Server\n=============\n\nFirst steps\n===========\n\n* **Installation:**\n  :ref:`Installation"
  },
  {
    "path": "doc/ref/backend.rst",
    "chars": 10222,
    "preview": ".. _ref-backend:\n.. module:: trytond.backend\n\n=======\nBackend\n=======\n\nThe backend manages the database connection and s"
  },
  {
    "path": "doc/ref/bus.rst",
    "chars": 3269,
    "preview": ".. _ref-bus:\n.. module:: trytond.bus\n\nBus\n===\n\nThe Tryton server listens on ``POST`` requests on the routes matching\n``/"
  },
  {
    "path": "doc/ref/cache.rst",
    "chars": 2452,
    "preview": ".. _ref-cache:\n.. module:: trytond.cache\n\nCache\n=====\n\n.. class:: Cache(name[, size_limit[, duration[, context]]])\n\n   U"
  },
  {
    "path": "doc/ref/exceptions.rst",
    "chars": 2443,
    "preview": ".. _ref-exceptions:\n.. module:: trytond.exceptions\n\nExceptions\n==========\n\n.. exception:: TrytonException\n\n   The base c"
  },
  {
    "path": "doc/ref/fields.rst",
    "chars": 31448,
    "preview": ".. _ref-models-fields:\n.. module:: trytond.model.fields\n\n======\nFields\n======\n\n.. contents::\n   :local:\n   :backlinks: e"
  },
  {
    "path": "doc/ref/filestore.rst",
    "chars": 1171,
    "preview": ".. _ref-filestore:\n.. module:: trytond.filestore\n\nFileStore\n=========\n\n.. class:: FileStore()\n\n   Store and retrieve fil"
  },
  {
    "path": "doc/ref/i18n.rst",
    "chars": 664,
    "preview": ".. _ref-i18n:\n.. module:: trytond.i18n\n\nInternationalization\n====================\n\n.. function:: gettext(message_id, [la"
  },
  {
    "path": "doc/ref/index.rst",
    "chars": 291,
    "preview": ".. _ref-index:\n\n=============\nAPI Reference\n=============\n\nReference of the ``trytond`` API:\n\n.. toctree::\n   :maxdepth:"
  },
  {
    "path": "doc/ref/models.rst",
    "chars": 30579,
    "preview": ".. _ref-models:\n.. module:: trytond.model\n\n======\nModels\n======\n\n.. contents::\n   :local:\n   :backlinks: entry\n   :depth"
  },
  {
    "path": "doc/ref/pool.rst",
    "chars": 2041,
    "preview": ".. _ref-pool:\n.. module:: trytond.pool\n\nPool\n====\n\n.. class:: Pool([database_name])\n\n   Store the instances of :class:`~"
  },
  {
    "path": "doc/ref/pyson.rst",
    "chars": 8787,
    "preview": ".. _ref-pyson:\n.. module:: trytond.pyson\n\nPYSON\n=====\n\nPYSON is the Python Statement and Object Notation.\n\nThere is also"
  },
  {
    "path": "doc/ref/rpc.rst",
    "chars": 1202,
    "preview": ".. _ref-rpc:\n.. module:: trytond.rpc\n\nRPC\n===\n\n.. class:: RPC([readonly[, instantiate[, result[, check_access[, unique[,"
  },
  {
    "path": "doc/ref/sendmail.rst",
    "chars": 2109,
    "preview": ".. _ref-sendmail:\n.. module:: trytond.sendmail\n\nSendmail\n========\n\n.. function:: sendmail_transactional(from_addr, to_ad"
  },
  {
    "path": "doc/ref/tests.rst",
    "chars": 3139,
    "preview": ".. _ref-test:\n.. module:: trytond.tests.test_tryton\n\nTests\n=====\n\n.. attribute:: DB_NAME\n\n   The name of the database to"
  },
  {
    "path": "doc/ref/tools/email.rst",
    "chars": 183,
    "preview": ".. _ref-tools-email_:\n.. module:: trytond.tools.email_\n\nEmail\n=====\n\n.. function:: set_from_header(message, sender, from"
  },
  {
    "path": "doc/ref/tools/immutabledict.rst",
    "chars": 157,
    "preview": ".. _ref-immutabledict:\n.. module:: trytond.tools.immutabledict\n\nImmutableDict\n=============\n\n.. class:: ImmutableDict\n\n "
  },
  {
    "path": "doc/ref/tools/index.rst",
    "chars": 158,
    "preview": ".. _ref-tools-index:\n\n=====\nTools\n=====\n\nTools API reference.\n\n.. toctree::\n    :maxdepth: 1\n\n    misc\n    email\n    sin"
  },
  {
    "path": "doc/ref/tools/misc.rst",
    "chars": 1150,
    "preview": ".. _ref-tools:\n.. module:: trytond.tools\n\nMiscellaneous\n=============\n\n.. function:: file_open(name[, mode[, subdir[, en"
  },
  {
    "path": "doc/ref/tools/singleton.rst",
    "chars": 218,
    "preview": ".. _ref-tools-singleton:\n.. module:: trytond.tools.singleton\n\nSingleton\n=========\n\n.. class:: Singleton\n\n   A metaclass "
  },
  {
    "path": "doc/ref/tools/timezone.rst",
    "chars": 608,
    "preview": ".. _ref-tools-timezone:\n.. module:: trytond.tools.timezone\n\ntimezone\n========\n\n.. function:: get_tzinfo(zoneid)\n\n   Get "
  },
  {
    "path": "doc/ref/transaction.rst",
    "chars": 4006,
    "preview": ".. _ref-transaction:\n.. module:: trytond.transaction\n\nTransaction\n===========\n\n.. class:: Transaction\n\n   Represents a T"
  },
  {
    "path": "doc/ref/wizard.rst",
    "chars": 6056,
    "preview": ".. _ref-wizard:\n.. module:: trytond.wizard\n\n\nWizard\n======\n\nA wizard is a `finite state machine`_.\n\nThere is also a more"
  },
  {
    "path": "doc/releases.rst",
    "chars": 90,
    "preview": ".. _releases-index:\n\n=============\nRelease notes\n=============\n\n.. include:: ../CHANGELOG\n"
  },
  {
    "path": "doc/topics/access_rights.rst",
    "chars": 3717,
    "preview": ".. _topics-access_rights:\n\n=============\nAccess Rights\n=============\n\nThere are 5 levels of access rights: `Model`_ , `A"
  },
  {
    "path": "doc/topics/actions.rst",
    "chars": 992,
    "preview": ".. _topics-actions:\n\n=======\nActions\n=======\n\nActions are used to describe specific behaviors in the client.\n\nThere are "
  },
  {
    "path": "doc/topics/backend_types.rst",
    "chars": 3751,
    "preview": ".. _topics-backend_types:\n\nBackend Types supported\n=======================\n\nThis table give a comprehensive list of the "
  },
  {
    "path": "doc/topics/bus.rst",
    "chars": 788,
    "preview": ".. _topics-notification:\n\n=====================\nSending notifications\n=====================\n\nTryton embeds a bus system "
  },
  {
    "path": "doc/topics/configuration.rst",
    "chars": 14273,
    "preview": ".. _topics-configuration:\n\n=============================\nConfiguration file for Tryton\n=============================\n\nTh"
  },
  {
    "path": "doc/topics/cron.rst",
    "chars": 1431,
    "preview": ".. _topics-cron:\n\n=================\nScheduled Actions\n=================\n\nTryton provides a scheduler (aka cron) which ca"
  },
  {
    "path": "doc/topics/domain.rst",
    "chars": 7848,
    "preview": ".. _topics-domain:\n\n\n======\nDomain\n======\n\nDomains_ represent a set of records. A domain is a list of none or\nmore claus"
  },
  {
    "path": "doc/topics/index.rst",
    "chars": 536,
    "preview": ".. _topics-index:\n\n=============\nUsing trytond\n=============\n\nIntroduction key parts of ``trytond``:\n\n.. toctree::\n   :m"
  },
  {
    "path": "doc/topics/install.rst",
    "chars": 983,
    "preview": ".. _topics-install:\n\n======================\nHow to install Tryton\n======================\n\nInstall Tryton\n==============\n"
  },
  {
    "path": "doc/topics/logs.rst",
    "chars": 1108,
    "preview": ".. _topics-logs:\n\n=====================\nLogging configuration\n=====================\n\nWithout any configuration, ``tryton"
  },
  {
    "path": "doc/topics/models/fields_default_value.rst",
    "chars": 804,
    "preview": ".. _topics-fields_default_value:\n\n=======================\nDefault value of fields\n=======================\n\nWhen a record"
  },
  {
    "path": "doc/topics/models/fields_on_change.rst",
    "chars": 1197,
    "preview": ".. _topics-fields_on_change:\n\n===================\non_change of fields\n===================\n\nTryton allows developers to d"
  },
  {
    "path": "doc/topics/models/index.rst",
    "chars": 1376,
    "preview": ".. _topics-models:\n\n======\nModels\n======\n\nA model represents a single business logic or concept. It contains fields and\n"
  },
  {
    "path": "doc/topics/modules/index.rst",
    "chars": 6022,
    "preview": ".. _topics-modules:\n\n=======\nModules\n=======\n\nThe modules of Tryton extend the functionality of the platform.\nThe server"
  },
  {
    "path": "doc/topics/pyson.rst",
    "chars": 3887,
    "preview": ".. _topics-pyson:\n\n=====\nPYSON\n=====\n\nPYSON is the PYthon Statement and Object Notation. It is a\nlightweight `domain spe"
  },
  {
    "path": "doc/topics/reports/index.rst",
    "chars": 7765,
    "preview": ".. _topics-reports:\n\n=======\nReports\n=======\n\nTryton can generate dynamic reports in many formats from templates. The re"
  },
  {
    "path": "doc/topics/rpc.rst",
    "chars": 1381,
    "preview": ".. _topics-rpc:\n\n=====================\nRemote Procedure Call\n=====================\n\nThere are two protocols supported by"
  },
  {
    "path": "doc/topics/setup_database.rst",
    "chars": 1783,
    "preview": ".. _topics-setup-database:\n\n=======================\nHow to setup a database\n=======================\n\nThe database sectio"
  },
  {
    "path": "doc/topics/start_server.rst",
    "chars": 2912,
    "preview": ".. _topics-start-server:\n\n=======================\nHow to start the server\n=======================\n\nWeb service\n========="
  },
  {
    "path": "doc/topics/task_queue.rst",
    "chars": 2229,
    "preview": ".. _topics-task-queue:\n\n==========\nTask Queue\n==========\n\nTryton provides a way to run asynchronously some tasks. You mu"
  },
  {
    "path": "doc/topics/testing.rst",
    "chars": 2880,
    "preview": ".. _topics-testing:\n\n=======\nTesting\n=======\n\nTryton supports both functional and unit tests.\n\nTesting your module\n~~~~~"
  },
  {
    "path": "doc/topics/translation.rst",
    "chars": 2191,
    "preview": ".. _topics-translation:\n\n===========\nTranslation\n===========\n\nThe translation of the user interface is provided module-w"
  },
  {
    "path": "doc/topics/triggers.rst",
    "chars": 922,
    "preview": ".. _topics-triggers:\n\n========\nTriggers\n========\n\nTriggers allow to define methods of :class:`~trytond.model.Model` that"
  },
  {
    "path": "doc/topics/user_application.rst",
    "chars": 2596,
    "preview": ".. _topics-user_application:\n\n================\nUser Application\n================\n\nTryton provides a way to connect URL r"
  },
  {
    "path": "doc/topics/user_errors_warnings.rst",
    "chars": 2032,
    "preview": ".. _topics-user_errors_warnings:\n\n========================\nUser Errors and Warnings\n========================\n\nWhen proce"
  },
  {
    "path": "doc/topics/views/extension.rst",
    "chars": 1130,
    "preview": ".. _topics-extension:\n\n==============\nExtending View\n==============\n\nExtending a view means, that the original view will"
  },
  {
    "path": "doc/topics/views/index.rst",
    "chars": 24473,
    "preview": ".. _topics-views:\n\n=====\nViews\n=====\n\nThe views are used to display records of an :class:`ModelView\n<trytond.model.Model"
  },
  {
    "path": "doc/topics/wizard.rst",
    "chars": 1669,
    "preview": ".. _topics-wizard:\n\n======\nWizard\n======\n\nA wizard describes a series of steps defined as :class:`~trytond.wizard.State`"
  },
  {
    "path": "doc/tutorial/index.rst",
    "chars": 98,
    "preview": ".. _tutorial-index:\n\n=========\nTutorials\n=========\n\n.. toctree::\n   :maxdepth: 1\n\n   module/index\n"
  },
  {
    "path": "doc/tutorial/module/anatomy.rst",
    "chars": 907,
    "preview": ".. _tutorial-module-anatomy:\n\nAnatomy of a module\n===================\n\nA Tryton module is a `python module`_ thus it is "
  },
  {
    "path": "doc/tutorial/module/default_values.rst",
    "chars": 1843,
    "preview": ".. _tutorial-module-default-values:\n\nSet default values\n==================\n\nDefault values are useful to save time for u"
  },
  {
    "path": "doc/tutorial/module/domains.rst",
    "chars": 3334,
    "preview": ".. _tutorial-module-domains:\n\nAdd domain restriction to fields\n================================\n\nOne common requirement "
  },
  {
    "path": "doc/tutorial/module/extend.rst",
    "chars": 2917,
    "preview": ".. _tutorial-module-extend:\n\nExtend model\n============\n\nSometimes we want to extend an existing :class:`~trytond.model.M"
  },
  {
    "path": "doc/tutorial/module/function_fields.rst",
    "chars": 3524,
    "preview": ".. _tutorial-module-function-fields:\n\nAdd computed fields\n===================\n\nComputed fields can also be defined to av"
  },
  {
    "path": "doc/tutorial/module/index.rst",
    "chars": 768,
    "preview": ".. _tutorial-module:\n\n===============\nModule Tutorial\n===============\n\nA step by step tutorial to create a first module."
  },
  {
    "path": "doc/tutorial/module/model.rst",
    "chars": 3935,
    "preview": ".. _tutorial-module-model:\n\nDefine model\n============\n\nThe :ref:`models <ref-models>` are the base objects of a module t"
  },
  {
    "path": "doc/tutorial/module/on_change.rst",
    "chars": 2662,
    "preview": ".. _tutorial-module-on-change:\n\nReact to user input\n===================\n\nTryton provides a way to :ref:`change the value"
  },
  {
    "path": "doc/tutorial/module/report.rst",
    "chars": 3722,
    "preview": ".. _tutorial-module-report:\n\nCreate report\n=============\n\nA frequent requirement is to generate a printable document for"
  },
  {
    "path": "doc/tutorial/module/setup.rst",
    "chars": 1684,
    "preview": ".. _tutorial-module-setup:\n\nSetup\n=====\n\nCreate virtual environment\n--------------------------\n\nThis step will cover the"
  },
  {
    "path": "doc/tutorial/module/setup_database.rst",
    "chars": 829,
    "preview": ".. _tutorial-module-setup-database:\n\nInitialize the database\n=======================\n\nBy default Tryton, use an SQLite d"
  },
  {
    "path": "doc/tutorial/module/states.rst",
    "chars": 3097,
    "preview": ".. _tutorial-module-states:\n\nAdd dynamic state to fields\n===========================\n\nSometimes you want to make fields "
  },
  {
    "path": "doc/tutorial/module/table_query.rst",
    "chars": 4745,
    "preview": ".. _tutorial-module-table-query:\n\nDefine aggregated model\n=======================\n\nAggregated data are useful to analyze"
  },
  {
    "path": "doc/tutorial/module/view.rst",
    "chars": 6258,
    "preview": ".. _tutorial-module-view:\n\nDisplay records\n===============\n\nHaving records in the database is nice but we want the user "
  },
  {
    "path": "doc/tutorial/module/wizard.rst",
    "chars": 5039,
    "preview": ".. _tutorial-module-wizard:\n\nCreate wizard\n=============\n\nSometime you want to add functionalities to a model that do no"
  },
  {
    "path": "doc/tutorial/module/workflow.rst",
    "chars": 4773,
    "preview": ".. _tutorial-module-workflow:\n\nDefine workflow\n===============\n\nOften records follow a workflow to change their state.\nF"
  },
  {
    "path": "setup.py",
    "chars": 6015,
    "preview": "#!/usr/bin/env python3\n# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains"
  },
  {
    "path": "tox.ini",
    "chars": 672,
    "preview": "[tox]\nenvlist = {py37,py38,py39,py310}-{sqlite,postgresql}\n\n[testenv]\nextras = test\ncommands =\n    coverage run -m unitt"
  },
  {
    "path": "trytond/__init__.py",
    "chars": 800,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/admin.py",
    "chars": 6290,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/application.py",
    "chars": 1370,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/__init__.py",
    "chars": 1093,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/database.py",
    "chars": 4381,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/postgresql/__init__.py",
    "chars": 402,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/postgresql/database.py",
    "chars": 25878,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/postgresql/init.sql",
    "chars": 4312,
    "preview": "CREATE SEQUENCE ir_configuration_id_seq;\n\nCREATE TABLE ir_configuration (\n    id INTEGER DEFAULT NEXTVAL('ir_configurati"
  },
  {
    "path": "trytond/backend/postgresql/table.py",
    "chars": 25308,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/sqlite/__init__.py",
    "chars": 402,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/sqlite/database.py",
    "chars": 20777,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/sqlite/init.sql",
    "chars": 2209,
    "preview": "CREATE TABLE ir_configuration (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    language VARCHAR,\n    hostname VARCHAR\n);\n"
  },
  {
    "path": "trytond/backend/sqlite/table.py",
    "chars": 16323,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/backend/table.py",
    "chars": 4129,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/bus.py",
    "chars": 9621,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/cache.py",
    "chars": 16336,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/commandline.py",
    "chars": 6958,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/config.py",
    "chars": 6154,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/console.py",
    "chars": 2234,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/const.py",
    "chars": 407,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/convert.py",
    "chars": 31302,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/cron.py",
    "chars": 1490,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/exceptions.py",
    "chars": 2055,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/filestore.py",
    "chars": 2122,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/i18n.py",
    "chars": 1022,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/__init__.py",
    "chars": 3310,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/action.py",
    "chars": 40352,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/action.xml",
    "chars": 9920,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/attachment.py",
    "chars": 4059,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/attachment.xml",
    "chars": 1960,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/avatar.py",
    "chars": 6355,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/cache.py",
    "chars": 342,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/calendar_.py",
    "chars": 2089,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/calendar_.xml",
    "chars": 4282,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/configuration.py",
    "chars": 1459,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/cron.py",
    "chars": 7275,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/cron.xml",
    "chars": 1954,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/date.py",
    "chars": 596,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/email.xml",
    "chars": 4525,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/email_.py",
    "chars": 20559,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/error.py",
    "chars": 5684,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/error.xml",
    "chars": 3592,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/exceptions.py",
    "chars": 947,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/export.py",
    "chars": 1858,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/export.xml",
    "chars": 2070,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/fonts/LICENSE",
    "chars": 4384,
    "preview": "Copyright 2019 The Karla Project Authors (https://github.com/googlefonts/karla)\n\nThis Font Software is licensed under th"
  },
  {
    "path": "trytond/ir/ir.xml",
    "chars": 1323,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/lang.py",
    "chars": 21139,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/lang.xml",
    "chars": 27205,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/locale/bg.po",
    "chars": 90910,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Икон"
  },
  {
    "path": "trytond/ir/locale/ca.po",
    "chars": 96198,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Icon"
  },
  {
    "path": "trytond/ir/locale/cs.po",
    "chars": 83939,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\n#, fuzzy\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsg"
  },
  {
    "path": "trytond/ir/locale/de.po",
    "chars": 97943,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Icon"
  },
  {
    "path": "trytond/ir/locale/es.po",
    "chars": 97167,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Icon"
  },
  {
    "path": "trytond/ir/locale/es_419.po",
    "chars": 79043,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"\"\n\nm"
  },
  {
    "path": "trytond/ir/locale/et.po",
    "chars": 90214,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Ikoo"
  },
  {
    "path": "trytond/ir/locale/fa.po",
    "chars": 90800,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"آیکو"
  },
  {
    "path": "trytond/ir/locale/fi.po",
    "chars": 83614,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\n#, fuzzy\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsg"
  },
  {
    "path": "trytond/ir/locale/fr.po",
    "chars": 97122,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Icôn"
  },
  {
    "path": "trytond/ir/locale/hu.po",
    "chars": 92026,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Ikon"
  },
  {
    "path": "trytond/ir/locale/id.po",
    "chars": 83138,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"\"\n\nm"
  },
  {
    "path": "trytond/ir/locale/it.po",
    "chars": 92692,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Icon"
  },
  {
    "path": "trytond/ir/locale/lo.po",
    "chars": 85661,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\n#, fuzzy\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsg"
  },
  {
    "path": "trytond/ir/locale/lt.po",
    "chars": 88463,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Ikon"
  },
  {
    "path": "trytond/ir/locale/nl.po",
    "chars": 95988,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Pict"
  },
  {
    "path": "trytond/ir/locale/pl.po",
    "chars": 95376,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Ikon"
  },
  {
    "path": "trytond/ir/locale/pt.po",
    "chars": 93325,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Ícon"
  },
  {
    "path": "trytond/ir/locale/ro.po",
    "chars": 87878,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Pict"
  },
  {
    "path": "trytond/ir/locale/ru.po",
    "chars": 92325,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Икон"
  },
  {
    "path": "trytond/ir/locale/sl.po",
    "chars": 92022,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Ikon"
  },
  {
    "path": "trytond/ir/locale/tr.po",
    "chars": 83745,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\n#, fuzzy\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsg"
  },
  {
    "path": "trytond/ir/locale/uk.po",
    "chars": 95101,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"Пікт"
  },
  {
    "path": "trytond/ir/locale/zh_CN.po",
    "chars": 84964,
    "preview": "#\nmsgid \"\"\nmsgstr \"Content-Type: text/plain; charset=utf-8\\n\"\n\nmsgctxt \"field:ir.action,icon:\"\nmsgid \"Icon\"\nmsgstr \"图标\"\n"
  },
  {
    "path": "trytond/ir/message.py",
    "chars": 1508,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/message.xml",
    "chars": 21563,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/model.py",
    "chars": 55800,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/model.xml",
    "chars": 14735,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/module.py",
    "chars": 21140,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/module.xml",
    "chars": 8376,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/note.py",
    "chars": 4199,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/note.xml",
    "chars": 1562,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/queue.xml",
    "chars": 461,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/queue_.py",
    "chars": 9475,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/resource.py",
    "chars": 6412,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/routes.py",
    "chars": 10318,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/rule.py",
    "chars": 11695,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/rule.xml",
    "chars": 2035,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/sequence.py",
    "chars": 14042,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/sequence.xml",
    "chars": 4927,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/session.py",
    "chars": 5587,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/translation.py",
    "chars": 66706,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/translation.xml",
    "chars": 7726,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/trigger.py",
    "chars": 12203,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/trigger.xml",
    "chars": 1529,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/tryton.cfg",
    "chars": 346,
    "preview": "[tryton]\nxml:\n    ir.xml\n    ui/ui.xml\n    ui/icon.xml\n    ui/menu.xml\n    ui/view.xml\n    action.xml\n    model.xml\n    "
  },
  {
    "path": "trytond/ir/ui/__init__.py",
    "chars": 211,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/ui/board.rnc",
    "chars": 5531,
    "preview": "namespace a = \"http://relaxng.org/ns/compatibility/annotations/1.0\"\n\nboard =\n  element board {\n    attlist.board,\n    (i"
  },
  {
    "path": "trytond/ir/ui/board.rng",
    "chars": 18063,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\"\n         xmlns:a=\"http://rel"
  },
  {
    "path": "trytond/ir/ui/calendar.rnc",
    "chars": 1033,
    "preview": "namespace a = \"http://relaxng.org/ns/compatibility/annotations/1.0\"\n\ncalendar = element calendar { attlist.calendar, fie"
  },
  {
    "path": "trytond/ir/ui/calendar.rng",
    "chars": 3508,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\"\n         xmlns:a=\"http://rel"
  },
  {
    "path": "trytond/ir/ui/form.rnc",
    "chars": 9660,
    "preview": "namespace a = \"http://relaxng.org/ns/compatibility/annotations/1.0\"\n\nform =\n  element form {\n    attlist.form,\n    (labe"
  },
  {
    "path": "trytond/ir/ui/form.rng",
    "chars": 32848,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\"\n         xmlns:a=\"http://rel"
  },
  {
    "path": "trytond/ir/ui/graph.rnc",
    "chars": 1400,
    "preview": "namespace a = \"http://relaxng.org/ns/compatibility/annotations/1.0\"\n\ngraph = element graph { attlist.graph, x*, y* }\natt"
  },
  {
    "path": "trytond/ir/ui/graph.rng",
    "chars": 5214,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\"\n         xmlns:a=\"http://rel"
  },
  {
    "path": "trytond/ir/ui/icon.py",
    "chars": 2520,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of this\n# repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/ui/icon.xml",
    "chars": 1521,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\n     this repository con"
  },
  {
    "path": "trytond/ir/ui/icons/LICENSE",
    "chars": 11357,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "trytond/ir/ui/menu.py",
    "chars": 9271,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  },
  {
    "path": "trytond/ir/ui/menu.xml",
    "chars": 2962,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/ui/tree.rnc",
    "chars": 3719,
    "preview": "namespace a = \"http://relaxng.org/ns/compatibility/annotations/1.0\"\n\ntree = element tree { attlist.tree,\n    (field\n    "
  },
  {
    "path": "trytond/ir/ui/tree.rng",
    "chars": 12969,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\"\n         xmlns:a=\"http://rel"
  },
  {
    "path": "trytond/ir/ui/ui.xml",
    "chars": 2022,
    "preview": "<?xml version=\"1.0\"?>\n<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of\nthis repository contains"
  },
  {
    "path": "trytond/ir/ui/view.py",
    "chars": 22383,
    "preview": "# This file is part of Tryton.  The COPYRIGHT file at the top level of\n# this repository contains the full copyright not"
  }
]

// ... and 342 more files (download for full content)

About this extraction

This page contains the full source code of the tryton/trytond GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 542 files (5.1 MB), approximately 1.4M tokens, and a symbol index with 4290 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!