Tryton Scripting Client#
A library to access Tryton’s models like a client.
Example of usage#
>>> from proteus import config, Model, Wizard, Report
Configuration#
Configuration to connect to a sqlite memory database using trytond as module.
>>> config = config.set_trytond('sqlite:///:memory:')
There is also the config.set_xmlrpc
method which can be used to connect
using a URL, and the config.set_xmlrpc_session
method (when used as a
context manager) which connects for a session.
Activating a module#
Find the module, call the activate button and run the upgrade wizard.
>>> Module = Model.get('ir.module')
>>> party_module, = Module.find([('name', '=', 'party')])
>>> party_module.click('activate')
>>> Wizard('ir.module.activate_upgrade').execute('upgrade')
Creating a party#
First instantiate a new Party:
>>> Party = Model.get('party.party')
>>> party = Party()
>>> party.id < 0
True
Fill the fields:
>>> party.name = 'ham'
Save the instance into the server:
>>> party.save()
>>> party.name
'ham'
>>> party.id > 0
True
Setting the language of the party#
The language on party is a Many2One
relation field. So it requires to get a
Model
instance as value.
>>> Lang = Model.get('ir.lang')
>>> en, = Lang.find([('code', '=', 'en')])
>>> party.lang = en
>>> party.save()
>>> party.lang.code
'en'
Creating an address for the party#
Addresses are store on party with a One2Many
field.
So the new address just needs to be appended to the list addresses
.
>>> address = party.addresses.new(postal_code='42')
>>> party.save()
>>> party.addresses
[proteus.Model.get('party.address')(...)]
Adding category to the party#
Categories are linked to party with a Many2Many
field.
So first create a category
>>> Category = Model.get('party.category')
>>> category = Category()
>>> category.name = 'spam'
>>> category.save()
Append it to categories of the party
>>> party.categories.append(category)
>>> party.save()
>>> party.categories
[proteus.Model.get('party.category')(...)]
Print party label#
There is a label report on Party
.
>>> label = Report('party.label')
The report is executed with a list of records and some extra data.
>>> type_, data, print_, name = label.execute([party], {})
Sorting addresses and register order#
Addresses are ordered by sequence which means they can be stored following a
specific order.
The set_sequence
method stores the current order.
>>> address = party.addresses.new(postal_code='69')
>>> party.save()
>>> address = party.addresses.new(postal_code='23')
>>> party.save()
Now changing the order.
>>> reversed_addresses = list(reversed(party.addresses))
>>> while party.addresses:
... _ = party.addresses.pop()
>>> party.addresses.extend(reversed_addresses)
>>> party.addresses.set_sequence()
>>> party.save()
>>> party.addresses == reversed_addresses
True
Setting context#
Make French translatable:
>>> Language = Model.get('ir.lang')
>>> french, = Language.find([('code', '=', 'fr')])
>>> french.translatable = True
>>> french.save()
Create a category in English:
>>> Category = Model.get('party.category')
>>> with config.set_context(language='en'):
... category = Category(name="Category")
... category.save()
Translate in French:
>>> with config.set_context(language='fr'):
... category_fr = Category(category.id)
... category_fr.name = "Categorie"
... category_fr.save()
Read in English:
>>> category.reload()
>>> category.name
'Category'
Read in French:
>>> category_fr.reload()
>>> category_fr.name
'Categorie'
- Release notes
- Version 7.2.0 - 2024-04-29
- Version 7.0.0 - 2023-10-30
- Version 6.8.0 - 2023-05-01
- Version 6.6.0 - 2022-10-31
- Version 6.4.0 - 2022-05-02
- Version 6.2.0 - 2021-11-01
- Version 6.0.0 - 2021-05-03
- Version 5.8.0 - 2020-11-02
- Version 5.6.0 - 2020-05-04
- Version 5.4.0 - 2019-11-04
- Version 5.2.0 - 2019-05-06
- Version 5.0.0 - 2018-10-01
- Version 4.8.0 - 2018-04-23
- Version 4.6.0 - 2017-10-30
- Version 4.4.0 - 2017-05-01
- Version 4.2.0 - 2016-11-28
- Version 4.0.0 - 2016-05-02
- Version 3.8.0 - 2015-11-02
- Version 3.6.0 - 2015-04-20
- Version 3.4.0 - 2014-10-20
- Version 3.2.0 - 2014-04-21
- Version 3.0.0 - 2013-10-21
- Version 2.8.0 - 2013-04-22
- Version 2.6.0 - 2012-10-22
- Version 2.4.0 - 2012-04-23
- Version 2.2.0 - 2011-10-25
- Version 2.0.0 - 2011-04-28
- Version 1.8.0 - 2010-12-24