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 #doctest: +ELLIPSIS
[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 #doctest: +ELLIPSIS
[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'
Metadata
Release files for proteus 8.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| proteus-8.2.0.tar.gz | 36.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| proteus-8.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.2 kB
Release files / proteus-8.2.0.tar.gz
| Download URL | proteus-8.2.0.tar.gz |
|---|---|
| Size | 36.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4558edb6b657f5f4106ef2dbc3c31a0db6e3cd1ac974772c2efe88a88227f9f6
|
|
BLAKE2b-256 checksum How to use checksums |
3f541e34d9258780e7a93d9a7bab4aaf171e0dbc75fb4b5582815b24aa7b32f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / proteus-8.2.0-py3-none-any.whl
| Download URL | proteus-8.2.0-py3-none-any.whl |
|---|---|
| Size | 41.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9565875916e5624291b1e4e9ce2df835d5d420c192adfd589eb9afde57f8447e
|
|
BLAKE2b-256 checksum How to use checksums |
c87d425e4c5442eb349abb4540046bda65fd3aeba66b272cd11d9833431d949e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|