From 51b60d5dd5c6bf8ac7cb495b909c989b766eceed Mon Sep 17 00:00:00 2001 From: ?ngel ?lvarez Date: Thu, 19 Apr 2018 17:02:38 +0200 Subject: [PATCH] update to 4.7 --- .drone.yml | 57 ++++++++++++++++++++ locale/{ca_ES.po => ca.po} | 0 locale/{es_ES.po => es.po} | 0 setup.py | 77 ++++++++++++++++++++++------ stock.py | 13 ++--- stock.xml | 1 - tests/test_stock_external_party.py | 8 ++- tox.ini | 15 ++++++ tryton.cfg | 2 +- view/party_quantity_tree.xml | 2 +- view/period_cache_party_form.xml | 2 +- view/period_cache_party_list.xml | 2 +- view/product_by_party_start_form.xml | 2 +- 13 files changed, 152 insertions(+), 29 deletions(-) create mode 100644 .drone.yml rename locale/{ca_ES.po => ca.po} (100%) rename locale/{es_ES.po => es.po} (100%) create mode 100644 tox.ini diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..897fc2e --- /dev/null +++ b/.drone.yml @@ -0,0 +1,57 @@ +clone: + hg: + image: plugins/hg + +pipeline: + tox: + image: ${IMAGE} + environment: + - CFLAGS=-O0 + - DB_CACHE=/cache + - TOX_TESTENV_PASSENV=CFLAGS DB_CACHE + - POSTGRESQL_URI=postgresql://postgres@postgresql:5432/ + commands: + - pip install tox + - tox -e "${TOXENV}-${DATABASE}" + notify: + image: drillster/drone-email + from: drone@localhost + host: smtp + port: 25 + skip_verify: true + when: + status: [ changed, failure ] + +services: + postgresql: + image: postgres + when: + matrix: + DATABASE: postgresql + +matrix: + include: + - IMAGE: python:2.7 + TOXENV: py27 + DATABASE: sqlite + - IMAGE: python:2.7 + TOXENV: py27 + DATABASE: postgresql + - IMAGE: python:3.4 + TOXENV: py34 + DATABASE: sqlite + - IMAGE: python:3.4 + TOXENV: py34 + DATABASE: postgresql + - IMAGE: python:3.5 + TOXENV: py35 + DATABASE: sqlite + - IMAGE: python:3.5 + TOXENV: py35 + DATABASE: postgresql + - IMAGE: python:3.6 + TOXENV: py36 + DATABASE: sqlite + - IMAGE: python:3.6 + TOXENV: py36 + DATABASE: postgresql diff --git a/locale/ca_ES.po b/locale/ca.po similarity index 100% rename from locale/ca_ES.po rename to locale/ca.po diff --git a/locale/es_ES.po b/locale/es.po similarity index 100% rename from locale/es_ES.po rename to locale/es.po diff --git a/setup.py b/setup.py index 595a513..ced2b5b 100644 --- a/setup.py +++ b/setup.py @@ -4,44 +4,83 @@ from setuptools import setup import re import os -import ConfigParser +import io +try: + from configparser import ConfigParser +except ImportError: + from ConfigParser import ConfigParser MODULE = 'stock_external_party' PREFIX = 'nantic' -MODULE2PREFIX = {} +MODULE2PREFIX = { + 'stock_external': 'nantic', + } def read(fname): - return open(os.path.join(os.path.dirname(__file__), fname)).read() + return io.open( + os.path.join(os.path.dirname(__file__), fname), + 'r', encoding='utf-8').read() -config = ConfigParser.ConfigParser() + +def get_require_version(name): + if minor_version % 2: + require = '%s >= %s.%s.dev0, < %s.%s' + else: + require = '%s >= %s.%s, < %s.%s' + require %= (name, major_version, minor_version, + major_version, minor_version + 1) + return require + +config = ConfigParser() config.readfp(open('tryton.cfg')) info = dict(config.items('tryton')) for key in ('depends', 'extras_depend', 'xml'): if key in info: info[key] = info[key].strip().splitlines() -major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2) + +version = info.get('version', '0.0.1') +major_version, minor_version, _ = version.split('.', 2) major_version = int(major_version) minor_version = int(minor_version) requires = [] for dep in info.get('depends', []): - if not re.match(r'(ir|res|webdav)(\W|$)', dep): + if not re.match(r'(ir|res)(\W|$)', dep): prefix = MODULE2PREFIX.get(dep, 'trytond') - requires.append('%s_%s >= %s.%s, < %s.%s' % - (prefix, dep, major_version, minor_version, - major_version, minor_version + 1)) -requires.append('trytond >= %s.%s, < %s.%s' % - (major_version, minor_version, major_version, minor_version + 1)) + requires.append(get_require_version('%s_%s' % (prefix, dep))) +requires.append(get_require_version('trytond')) -tests_require = ['mock', 'proteus >= %s.%s, < %s.%s' % - (major_version, minor_version, major_version, minor_version + 1)] +tests_require = [ + 'mock', + get_require_version('proteus'), +] + +series = '%s.%s' % (major_version, minor_version) +if minor_version % 2: + branch = 'default' +else: + branch = series + +dependency_links = [ + ('hg+https://bitbucket.org/nantic/' + 'trytond-stock_external@%(branch)s' + '#egg=nantic-stock_external-%(series)s' % { + 'branch': branch, + 'series': series, + }), + ] + +if minor_version % 2: + # Add development index for testing with proteus + dependency_links.append('https://trydevpi.tryton.org/') setup(name='%s_%s' % (PREFIX, MODULE), - version=info.get('version', '0.0.1'), + version=version, description='', long_description=read('README'), author='NaN·tic', + author_email='info@nan-tic.com', url='http://www.nan-tic.com/', download_url="https://bitbucket.org/nantic/trytond-%s" % MODULE, package_dir={'trytond.modules.%s' % MODULE: '.'}, @@ -71,12 +110,17 @@ setup(name='%s_%s' % (PREFIX, MODULE), 'Natural Language :: Russian', 'Natural Language :: Spanish', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Office/Business', ], license='GPL-3', install_requires=requires, + dependency_links=dependency_links, zip_safe=False, entry_points=""" [trytond.modules] @@ -85,4 +129,7 @@ setup(name='%s_%s' % (PREFIX, MODULE), test_suite='tests', test_loader='trytond.test_loader:Loader', tests_require=tests_require, + use_2to3=True, + convert_2to3_doctests=[ + ], ) diff --git a/stock.py b/stock.py index 23e6979..4a57e88 100644 --- a/stock.py +++ b/stock.py @@ -33,11 +33,12 @@ class Party(StockMixin): ('type', '=', 'warehouse') ]) location_ids = [x.id for x in warehouses] - products = None + product_ids = None if context.get('products'): - products = Product.browse(context.get('products')) - pbl = cls._get_quantity(parties, name, list(location_ids), products, - grouping=('product', 'party')) + product_ids =[x.id for x in Product.browse(context.get('products'))] + + pbl = cls._get_quantity(parties, name, list(location_ids), + grouping=('product', 'party',), grouping_filter=(product_ids,)) return pbl @classmethod @@ -163,7 +164,7 @@ class Move: if 'party' not in grouping and context.get('exclude_party_quantities'): new_grouping = grouping[:] + ('party',) if grouping_filter is not None: - new_grouping_filter = grouping_filter[:] + (None, ) + new_grouping_filter = grouping_filter[:] query = super(Move, cls).compute_quantities_query( location_ids, with_childs=with_childs, grouping=new_grouping, @@ -183,7 +184,7 @@ class Move: if 'party' not in grouping and context.get('exclude_party_quantities'): new_grouping = grouping[:] + ('party',) if grouping_filter is not None: - new_grouping_filter = grouping_filter[:] + (None, ) + new_grouping_filter = grouping_filter[:] remove_party_grouping = True quantities = super(Move, cls).compute_quantities(query, location_ids, diff --git a/stock.xml b/stock.xml index 474cd0c..f5cf455 100644 --- a/stock.xml +++ b/stock.xml @@ -27,7 +27,6 @@ Party party.party - diff --git a/tests/test_stock_external_party.py b/tests/test_stock_external_party.py index 870e93b..b501ae1 100644 --- a/tests/test_stock_external_party.py +++ b/tests/test_stock_external_party.py @@ -260,10 +260,12 @@ class TestCase(ModuleTestCase): party = Party(party.id) self.assertEqual(party.quantity, 0.0) + yesterday = datetime.date.today() - relativedelta(days=1) + inventory, = Inventory.create([{ 'location': storage.id, 'lost_found': lost_found.id, - 'date': datetime.date.today(), + 'date': yesterday, 'lines': [('create', [{ 'product': product.id, 'party': party.id, @@ -283,10 +285,12 @@ class TestCase(ModuleTestCase): 'date': datetime.date.today(), }]) Inventory.complete_lines([inventory]) + inventory = Inventory(inventory.id) + line, = inventory.lines self.assertEqual(line.product, product) self.assertEqual(line.party, party) - self.assertEqual(line.quantity, 5.0) + self.assertEqual(line.expected_quantity, 5.0) def suite(): diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..2082ab4 --- /dev/null +++ b/tox.ini @@ -0,0 +1,15 @@ +[tox] +envlist = {py27,py34,py35,py36}-{sqlite,postgresql},pypy-{sqlite,postgresql} + +[testenv] +commands = {envpython} setup.py test +deps = + {py27,py34,py35,py36}-postgresql: psycopg2 >= 2.5 + pypy-postgresql: psycopg2cffi >= 2.5 + sqlite: sqlitebck +setenv = + sqlite: TRYTOND_DATABASE_URI={env:SQLITE_URI:sqlite://} + postgresql: TRYTOND_DATABASE_URI={env:POSTGRESQL_URI:postgresql://} + sqlite: DB_NAME={env:SQLITE_NAME::memory:} + postgresql: DB_NAME={env:POSTGRESQL_NAME:test} +install_command = pip install --pre --process-dependency-links {opts} {packages} diff --git a/tryton.cfg b/tryton.cfg index 83c3b15..0da7e6f 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -1,5 +1,5 @@ [tryton] -version=4.1.0 +version=4.7.0 depends: stock_external xml: diff --git a/view/party_quantity_tree.xml b/view/party_quantity_tree.xml index e47a2a9..c60be76 100644 --- a/view/party_quantity_tree.xml +++ b/view/party_quantity_tree.xml @@ -1,7 +1,7 @@ - + diff --git a/view/period_cache_party_form.xml b/view/period_cache_party_form.xml index cd76b94..b38d79c 100644 --- a/view/period_cache_party_form.xml +++ b/view/period_cache_party_form.xml @@ -1,7 +1,7 @@ -
+