Merge README and doc and remove INSTALL
issue7397 review253271002
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
Installing proteus
|
||||
==================
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* Python 3.4 or later (http://www.python.org/)
|
||||
* python-dateutil (http://labix.org/python-dateutil)
|
||||
* Optional: trytond (http://www.tryton.org/)
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Once you've downloaded and unpacked the proteus source release, enter the
|
||||
directory where the archive was unpacked, and run:
|
||||
|
||||
python setup.py install
|
||||
|
||||
Note that you may need administrator/root privileges for this step, as
|
||||
this command will by default attempt to install module to the Python
|
||||
site-packages directory on your system.
|
||||
|
||||
For advanced options, please refer to the easy_install and/or the distutils
|
||||
documentation:
|
||||
|
||||
http://setuptools.readthedocs.io/en/latest/easy_install.html
|
||||
http://docs.python.org/inst/inst.html
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
include LICENSE
|
||||
include COPYRIGHT
|
||||
include README
|
||||
include INSTALL
|
||||
include CHANGELOG
|
||||
include COPYRIGHT
|
||||
include LICENSE
|
||||
include README.rst
|
||||
include doc/*
|
||||
|
||||
@@ -1,152 +0,0 @@
|
||||
proteus
|
||||
=======
|
||||
|
||||
A library to access Tryton's models like a client.
|
||||
|
||||
Installing
|
||||
----------
|
||||
|
||||
See INSTALL
|
||||
|
||||
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:')
|
||||
|
||||
Installing 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 instanciate 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(zip='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(zip='69')
|
||||
>>> party.save()
|
||||
>>> address = party.addresses.new(zip='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
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
If you encounter any problems with Tryton, please don't hesitate to ask
|
||||
questions on the Tryton forum or IRC channel:
|
||||
|
||||
http://www.tryton.org/forum
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
See LICENSE
|
||||
|
||||
Copyright
|
||||
---------
|
||||
|
||||
See COPYRIGHT
|
||||
|
||||
|
||||
For more information please visit the Tryton web site:
|
||||
|
||||
http://www.tryton.org/
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
doc/index.rst
|
||||
+125
-1
@@ -1 +1,125 @@
|
||||
.. include:: ../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:')
|
||||
|
||||
Installing 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 instanciate 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(zip='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(zip='69')
|
||||
>>> party.save()
|
||||
>>> address = party.addresses.new(zip='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
|
||||
|
||||
@@ -48,11 +48,17 @@ if minor_version % 2:
|
||||
setup(name=name,
|
||||
version=version,
|
||||
description='Library to access Tryton server as a client',
|
||||
long_description=read('README'),
|
||||
long_description=read('README.rst'),
|
||||
author='Tryton',
|
||||
author_email='bugs@tryton.org',
|
||||
url='http://www.tryton.org/',
|
||||
download_url=download_url,
|
||||
project_urls={
|
||||
"Bug Tracker": 'https://bugs.tryton.org/',
|
||||
"Documentation": 'https://docs.tryton.org/',
|
||||
"Forum": 'https://www.tryton.org/forum',
|
||||
"Source Code": 'https://hg.tryton.org/proteus',
|
||||
},
|
||||
keywords='tryton library cli',
|
||||
packages=find_packages(),
|
||||
classifiers=[
|
||||
|
||||
Reference in New Issue
Block a user