Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package proteus for openSUSE:Factory checked in at 2022-04-20 16:57:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/proteus (Old) and /work/SRC/openSUSE:Factory/.proteus.new.1941 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "proteus" Wed Apr 20 16:57:16 2022 rev:22 rq:971010 version:6.0.6 Changes: -------- --- /work/SRC/openSUSE:Factory/proteus/proteus.changes 2022-03-07 17:48:55.967085333 +0100 +++ /work/SRC/openSUSE:Factory/.proteus.new.1941/proteus.changes 2022-04-20 16:57:46.350647848 +0200 @@ -1,0 +2,5 @@ +Mon Apr 18 19:25:16 UTC 2022 - Axel Braun <[email protected]> + +- Version 6.0.6 - Bugfix Release + +------------------------------------------------------------------- Old: ---- proteus-6.0.5.tar.gz proteus-6.0.5.tar.gz.asc New: ---- proteus-6.0.6.tar.gz proteus-6.0.6.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ proteus.spec ++++++ --- /var/tmp/diff_new_pack.2b9Gux/_old 2022-04-20 16:57:46.766648236 +0200 +++ /var/tmp/diff_new_pack.2b9Gux/_new 2022-04-20 16:57:46.770648240 +0200 @@ -1,7 +1,7 @@ # # spec file for package proteus # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # Copyright (c) 2014-2021 Dr. Axel Braun # # All modifications and additions to the file contributed by third parties @@ -19,7 +19,7 @@ %define majorver 6.0 Name: proteus -Version: %{majorver}.5 +Version: %{majorver}.6 Release: 0 Summary: A library to access Tryton's modules like a client License: GPL-3.0-or-later ++++++ proteus-6.0.5.tar.gz -> proteus-6.0.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/proteus-6.0.5/.hgtags new/proteus-6.0.6/.hgtags --- old/proteus-6.0.5/.hgtags 2022-03-01 19:23:18.000000000 +0100 +++ new/proteus-6.0.6/.hgtags 2022-04-15 21:27:46.000000000 +0200 @@ -25,3 +25,4 @@ dc3d781b552d24dcfb7b0ced4322b1ba17e6ca09 6.0.3 8e6d0969604981e6d024b203424b1b3f0bcd4cb3 6.0.4 c20749d242200840432ab0b87ce7c0072ee1be34 6.0.5 +b279acacc05c6df60ca9833a3eb6e22b9f9fa488 6.0.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/proteus-6.0.5/CHANGELOG new/proteus-6.0.6/CHANGELOG --- old/proteus-6.0.5/CHANGELOG 2022-03-01 19:23:17.000000000 +0100 +++ new/proteus-6.0.6/CHANGELOG 2022-04-15 21:27:46.000000000 +0200 @@ -1,3 +1,6 @@ +Version 6.0.6 - 2022-04-15 +* Bug fixes (see mercurial logs for details) + Version 6.0.5 - 2022-03-01 * Bug fixes (see mercurial logs for details) * Use defusedxml to parse XML (11244) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/proteus-6.0.5/PKG-INFO new/proteus-6.0.6/PKG-INFO --- old/proteus-6.0.5/PKG-INFO 2022-03-01 19:23:19.383111000 +0100 +++ new/proteus-6.0.6/PKG-INFO 2022-04-15 21:27:49.119705000 +0200 @@ -1,142 +1,16 @@ Metadata-Version: 2.1 Name: proteus -Version: 6.0.5 +Version: 6.0.6 Summary: Library to access Tryton server as a client Home-page: http://www.tryton.org/ +Download-URL: http://downloads.tryton.org/6.0/ Author: Tryton Author-email: [email protected] License: LGPL-3 -Download-URL: http://downloads.tryton.org/6.0/ Project-URL: Bug Tracker, https://bugs.tryton.org/ Project-URL: Documentation, https://docs.tryton.org/ Project-URL: Forum, https://www.tryton.org/forum Project-URL: Source Code, https://hg.tryton.org/proteus -Description: ======================= - 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:') - - 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 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(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 - Keywords: tryton library cli Platform: any Classifier: Development Status :: 5 - Production/Stable @@ -157,3 +31,132 @@ Classifier: Topic :: Office/Business Requires-Python: >=3.6 Provides-Extra: trytond +License-File: LICENSE + +======================= +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:') + +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 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(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 + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/proteus-6.0.5/proteus/__init__.py new/proteus-6.0.6/proteus/__init__.py --- old/proteus-6.0.5/proteus/__init__.py 2022-01-15 16:17:52.000000000 +0100 +++ new/proteus-6.0.6/proteus/__init__.py 2022-03-01 19:23:27.000000000 +0100 @@ -10,7 +10,7 @@ import proteus.config -__version__ = "6.0.5" +__version__ = "6.0.6" __all__ = ['Model', 'Wizard', 'Report'] _MODELS = threading.local() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/proteus-6.0.5/proteus/pyson.py new/proteus-6.0.6/proteus/pyson.py --- old/proteus-6.0.5/proteus/pyson.py 2021-09-27 23:36:47.000000000 +0200 +++ new/proteus-6.0.6/proteus/pyson.py 2022-03-25 19:22:35.000000000 +0100 @@ -153,7 +153,7 @@ @staticmethod def eval(dct, context): - if '.' in dct['v']: + if '.' in dct['v'] and dct['v'] not in context: base, name = dct['v'].split('.', 1) return Eval.eval({ 'v': name, @@ -509,7 +509,10 @@ @staticmethod def eval(dct, context): - return dct['k'] in dct['v'] + if dct['v']: + return dct['k'] in dct['v'] + else: + return False class Date(PYSON): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/proteus-6.0.5/proteus.egg-info/PKG-INFO new/proteus-6.0.6/proteus.egg-info/PKG-INFO --- old/proteus-6.0.5/proteus.egg-info/PKG-INFO 2022-03-01 19:23:18.000000000 +0100 +++ new/proteus-6.0.6/proteus.egg-info/PKG-INFO 2022-04-15 21:27:48.000000000 +0200 @@ -1,142 +1,16 @@ Metadata-Version: 2.1 Name: proteus -Version: 6.0.5 +Version: 6.0.6 Summary: Library to access Tryton server as a client Home-page: http://www.tryton.org/ +Download-URL: http://downloads.tryton.org/6.0/ Author: Tryton Author-email: [email protected] License: LGPL-3 -Download-URL: http://downloads.tryton.org/6.0/ Project-URL: Bug Tracker, https://bugs.tryton.org/ Project-URL: Documentation, https://docs.tryton.org/ Project-URL: Forum, https://www.tryton.org/forum Project-URL: Source Code, https://hg.tryton.org/proteus -Description: ======================= - 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:') - - 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 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(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 - Keywords: tryton library cli Platform: any Classifier: Development Status :: 5 - Production/Stable @@ -157,3 +31,132 @@ Classifier: Topic :: Office/Business Requires-Python: >=3.6 Provides-Extra: trytond +License-File: LICENSE + +======================= +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:') + +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 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(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 + +
