diff --git a/.drone.yml b/.drone.yml index e0bc2f7026..5da6083eb7 100644 --- a/.drone.yml +++ b/.drone.yml @@ -25,12 +25,6 @@ services: 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 diff --git a/CHANGELOG b/CHANGELOG index 6062bec5d1..c4751337fb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Remove support for Python 2.7 * Invoice shipment cost with cost method on order and invoice method on shipment when at least one shipment is done. diff --git a/INSTALL b/INSTALL index ffeb05a932..df0d70c629 100644 --- a/INSTALL +++ b/INSTALL @@ -4,7 +4,7 @@ Installing trytond_sale_shipment_cost Prerequisites ------------- - * Python 2.7 or later (http://www.python.org/) + * Python 3.4 or later (http://www.python.org/) * trytond (http://www.tryton.org/) * trytond_carrier (http://www.tryton.org/) * trytond_sale (http://www.tryton.org/) diff --git a/sale.py b/sale.py index ba3766fb26..fbfb8bba25 100644 --- a/sale.py +++ b/sale.py @@ -25,8 +25,7 @@ def get_sale_methods(field_name): return func -class Configuration: - __metaclass__ = PoolMeta +class Configuration(metaclass=PoolMeta): __name__ = 'sale.configuration' sale_shipment_cost_method = fields.MultiValue(sale_shipment_cost_method) get_sale_shipment_cost_methods = get_sale_methods('shipment_cost_method') @@ -44,8 +43,7 @@ class Configuration: 'sale_shipment_cost_method').default_sale_shipment_cost_method() -class ConfigurationSaleMethod: - __metaclass__ = PoolMeta +class ConfigurationSaleMethod(metaclass=PoolMeta): __name__ = 'sale.configuration.sale_method' sale_shipment_cost_method = sale_shipment_cost_method get_sale_shipment_cost_methods = get_sale_methods('shipment_cost_method') @@ -75,8 +73,7 @@ class ConfigurationSaleMethod: return 'order' -class Sale: - __metaclass__ = PoolMeta +class Sale(metaclass=PoolMeta): __name__ = 'sale.sale' carrier = fields.Many2One('carrier', 'Carrier', domain=[ @@ -318,8 +315,7 @@ class Sale: return invoice -class SaleLine: - __metaclass__ = PoolMeta +class SaleLine(metaclass=PoolMeta): __name__ = 'sale.line' shipment_cost = fields.Numeric('Shipment Cost', digits=price_digits) @@ -337,8 +333,7 @@ class SaleLine: return quantity -class ReturnSale: - __metaclass__ = PoolMeta +class ReturnSale(metaclass=PoolMeta): __name__ = 'sale.return_sale' def do_return_(self, action): @@ -359,8 +354,7 @@ class ReturnSale: return action, data -class Promotion: - __metaclass__ = PoolMeta +class Promotion(metaclass=PoolMeta): __name__ = 'sale.promotion' def get_context_formula(self, sale_line): diff --git a/setup.py b/setup.py index 369b6b817d..2758f576d5 100644 --- a/setup.py +++ b/setup.py @@ -1,15 +1,12 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # This file is part of Tryton. The COPYRIGHT file at the top level of # this repository contains the full copyright notices and license terms. -from setuptools import setup -import re -import os import io -try: - from configparser import ConfigParser -except ImportError: - from ConfigParser import ConfigParser +import os +import re +from configparser import ConfigParser +from setuptools import setup def read(fname): @@ -27,6 +24,7 @@ def get_require_version(name): major_version, minor_version + 1) return require + config = ConfigParser() config.readfp(open('tryton.cfg')) info = dict(config.items('tryton')) @@ -104,7 +102,6 @@ setup(name=name, 'Natural Language :: Slovenian', 'Natural Language :: Spanish', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', @@ -113,6 +110,7 @@ setup(name=name, 'Topic :: Office/Business', ], license='GPL-3', + python_required='>=3.4', install_requires=requires, extras_require={ }, @@ -125,8 +123,4 @@ setup(name=name, test_suite='tests', test_loader='trytond.test_loader:Loader', tests_require=tests_require, - use_2to3=True, - convert_2to3_doctests=[ - 'tests/scenario_sale_shipment_cost.rst', - ], ) diff --git a/stock.py b/stock.py index 5b8e5da02c..f0fdd691da 100644 --- a/stock.py +++ b/stock.py @@ -12,8 +12,7 @@ from trytond.modules.product import price_digits __all__ = ['ShipmentOut'] -class ShipmentOut: - __metaclass__ = PoolMeta +class ShipmentOut(metaclass=PoolMeta): __name__ = 'stock.shipment.out' carrier = fields.Many2One('carrier', 'Carrier', states={ 'readonly': ~Eval('state').in_(['draft', 'waiting', 'assigned', diff --git a/tests/scenario_sale_shipment_cost.rst b/tests/scenario_sale_shipment_cost.rst index ddb96a77c1..8b6dfa7d8b 100644 --- a/tests/scenario_sale_shipment_cost.rst +++ b/tests/scenario_sale_shipment_cost.rst @@ -129,7 +129,7 @@ Sale products with cost on shipment:: >>> sale.click('confirm') >>> sale.click('process') >>> sale.state - u'processing' + 'processing' >>> sale.untaxed_amount Decimal('103.00') @@ -150,16 +150,16 @@ Send products:: >>> shipment.cost_currency == company.currency True >>> shipment.state - u'waiting' + 'waiting' >>> shipment.click('assign_force') >>> shipment.state - u'assigned' + 'assigned' >>> shipment.click('pack') >>> shipment.state - u'packed' + 'packed' >>> shipment.click('done') >>> shipment.state - u'done' + 'done' Check customer invoice:: @@ -193,7 +193,7 @@ Sale products with cost on order:: >>> sale.click('confirm') >>> sale.click('process') >>> sale.state - u'processing' + 'processing' >>> sale.untaxed_amount Decimal('63.00') @@ -241,7 +241,7 @@ Sale products with cost on order and invoice method on shipment:: >>> sale.click('confirm') >>> sale.click('process') >>> sale.state - u'processing' + 'processing' Check no customer invoice:: @@ -255,7 +255,7 @@ Send products:: >>> shipment.click('pack') >>> shipment.click('done') >>> shipment.state - u'done' + 'done' Check customer invoice:: diff --git a/tox.ini b/tox.ini index 2082ab4f4d..adbcbf8431 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,11 @@ [tox] -envlist = {py27,py34,py35,py36}-{sqlite,postgresql},pypy-{sqlite,postgresql} +envlist = {py34,py35,py36}-{sqlite,postgresql},pypy3-{sqlite,postgresql} [testenv] commands = {envpython} setup.py test deps = - {py27,py34,py35,py36}-postgresql: psycopg2 >= 2.5 - pypy-postgresql: psycopg2cffi >= 2.5 + {py34,py35,py36}-postgresql: psycopg2 >= 2.5 + pypy3-postgresql: psycopg2cffi >= 2.5 sqlite: sqlitebck setenv = sqlite: TRYTOND_DATABASE_URI={env:SQLITE_URI:sqlite://}