Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tryton/proteus
Mirror of Proteus
https://github.com/tryton/proteus
client library python tryton
Last synced: 5 days ago
JSON representation
Mirror of Proteus
- Host: GitHub
- URL: https://github.com/tryton/proteus
- Owner: tryton
- License: other
- Archived: true
- Created: 2013-05-22T14:51:36.000Z (over 11 years ago)
- Default Branch: develop
- Last Pushed: 2022-11-18T10:07:30.000Z (almost 2 years ago)
- Last Synced: 2024-08-02T12:47:05.416Z (3 months ago)
- Topics: client, library, python, tryton
- Language: Python
- Homepage: https://hg.tryton.org/proteus
- Size: 1.06 MB
- Stars: 12
- Watchers: 6
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - tryton/proteus - Mirror of Proteus (python)
README
=======================
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
TrueFill the fields:
>>> party.name = 'ham'
Save the instance into the server:
>>> party.save()
>>> party.name
'ham'
>>> party.id > 0
TrueSetting 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
TrueSetting 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'.. toctree::
:maxdepth: 2releases