From 2f466757406ca7789eb6150d28f37c4c066141fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 26 Jun 2018 19:11:55 +0200 Subject: [PATCH] Remove support for Python 2.7 issue7497 review53261002 --- .drone.yml | 6 ------ CHANGELOG | 2 ++ INSTALL | 2 +- product.py | 6 ++---- purchase.py | 9 +++------ sale.py | 9 +++------ setup.py | 20 +++++++------------ stock.py | 3 +-- tests/scenario_sale_supply.rst | 18 ++++++++--------- ...enario_sale_supply_shipment_on_invoice.rst | 2 +- tox.ini | 6 +++--- 11 files changed, 32 insertions(+), 51 deletions(-) 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 8bbb6771a3..f4fa6a318f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Remove support for Python 2.7 + Version 4.8.0 - 2018-04-23 * Bug fixes (see mercurial logs for details) * Create requests depending on the shipment method diff --git a/INSTALL b/INSTALL index 80777673a1..348b8c10f4 100644 --- a/INSTALL +++ b/INSTALL @@ -4,7 +4,7 @@ Installing trytond_sale_supply 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_sale (http://www.tryton.org/) * trytond_purchase (http://www.tryton.org/) diff --git a/product.py b/product.py index 85abb69c04..580ec29527 100644 --- a/product.py +++ b/product.py @@ -7,8 +7,7 @@ from trytond.pyson import Eval __all__ = ['Template', 'Product'] -class Template: - __metaclass__ = PoolMeta +class Template(metaclass=PoolMeta): __name__ = 'product.template' supply_on_sale = fields.Boolean('Supply On Sale', @@ -18,6 +17,5 @@ class Template: depends=['purchasable', 'salable']) -class Product: - __metaclass__ = PoolMeta +class Product(metaclass=PoolMeta): __name__ = 'product.product' diff --git a/purchase.py b/purchase.py index 0007229496..89ae26041a 100644 --- a/purchase.py +++ b/purchase.py @@ -11,8 +11,7 @@ __all__ = ['PurchaseRequest', 'Purchase', 'HandlePurchaseCancellationException'] -class PurchaseRequest: - __metaclass__ = PoolMeta +class PurchaseRequest(metaclass=PoolMeta): __name__ = 'purchase.request' sale_lines = fields.One2Many( @@ -45,8 +44,7 @@ class PurchaseRequest: Sale.process(Sale.browse(sale_ids)) -class Purchase: - __metaclass__ = PoolMeta +class Purchase(metaclass=PoolMeta): __name__ = 'purchase.purchase' @classmethod @@ -82,8 +80,7 @@ class Purchase: cls._sale_supply_process(purchases) -class HandlePurchaseCancellationException: - __metaclass__ = PoolMeta +class HandlePurchaseCancellationException(metaclass=PoolMeta): __name__ = 'purchase.request.handle.purchase.cancellation' def transition_cancel_request(self): diff --git a/sale.py b/sale.py index cf3f6e205c..9c9c1af7c1 100644 --- a/sale.py +++ b/sale.py @@ -7,8 +7,7 @@ from trytond.pyson import Eval __all__ = ['Sale', 'SaleLine'] -class Sale: - __metaclass__ = PoolMeta +class Sale(metaclass=PoolMeta): __name__ = 'sale.sale' def is_done(self): @@ -58,8 +57,7 @@ class Sale: ShipmentOut.wait(shipments) -class SaleLine: - __metaclass__ = PoolMeta +class SaleLine(metaclass=PoolMeta): __name__ = 'sale.line' purchase_request = fields.Many2One('purchase.request', 'Purchase Request', @@ -177,8 +175,7 @@ class SaleLine: if move.state != 'draft': continue location_qties_converted = {} - for location_id, quantity in ( - location_quantities.iteritems()): + for location_id, quantity in location_quantities.items(): location_qties_converted[location_id] = ( Uom.compute_qty(move.product.default_uom, quantity, move.uom, round=False)) diff --git a/setup.py b/setup.py index 19c64952c1..6c2236cd30 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')) @@ -101,7 +99,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', @@ -111,6 +108,7 @@ setup(name=name, 'Topic :: Office/Business :: Financial :: Accounting', ], license='GPL-3', + python_requires='>=3.4', install_requires=requires, dependency_links=dependency_links, zip_safe=False, @@ -121,8 +119,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_supply.rst', - ], ) diff --git a/stock.py b/stock.py index 98f209a869..325c7cdac0 100644 --- a/stock.py +++ b/stock.py @@ -9,8 +9,7 @@ from trytond.pool import Pool, PoolMeta __all__ = ['ShipmentIn'] -class ShipmentIn: - __metaclass__ = PoolMeta +class ShipmentIn(metaclass=PoolMeta): __name__ = 'stock.shipment.in' @classmethod diff --git a/tests/scenario_sale_supply.rst b/tests/scenario_sale_supply.rst index b955a22ee9..070174b485 100644 --- a/tests/scenario_sale_supply.rst +++ b/tests/scenario_sale_supply.rst @@ -129,14 +129,14 @@ Sale 250 products:: >>> sale.click('confirm') >>> sale.click('process') >>> sale.state - u'processing' + 'processing' >>> shipment, = sale.shipments >>> move, = shipment.outgoing_moves >>> move.state - u'staging' + 'staging' >>> move, = shipment.inventory_moves >>> move.state - u'staging' + 'staging' Delete Purchase Request:: @@ -167,16 +167,16 @@ Create Purchase from Request:: >>> purchase.click('confirm') >>> purchase.click('process') >>> purchase.state - u'processing' + 'processing' >>> set_user(sale_user) >>> sale.reload() >>> shipment, = sale.shipments >>> move, = shipment.outgoing_moves >>> move.state - u'draft' + 'draft' >>> move, = shipment.inventory_moves >>> move.state - u'draft' + 'draft' Receive 100 products:: @@ -190,7 +190,7 @@ Receive 100 products:: >>> shipment.click('receive') >>> shipment.click('done') >>> shipment.state - u'done' + 'done' >>> set_user(sale_user) >>> sale.reload() >>> shipment, = sale.shipments @@ -232,7 +232,7 @@ not create a new purchase request:: >>> sale.click('confirm') >>> sale.click('process') >>> sale.state - u'processing' + 'processing' >>> shipment, = sale.shipments >>> set_user(stock_user) >>> Inventory = Model.get('stock.inventory') @@ -250,7 +250,7 @@ not create a new purchase request:: >>> inventory.save() >>> inventory.click('confirm') >>> inventory.state - u'done' + 'done' >>> shipment.click('assign_try') True >>> shipment.click('pack') diff --git a/tests/scenario_sale_supply_shipment_on_invoice.rst b/tests/scenario_sale_supply_shipment_on_invoice.rst index 19abdd0a76..323f4d5d2d 100644 --- a/tests/scenario_sale_supply_shipment_on_invoice.rst +++ b/tests/scenario_sale_supply_shipment_on_invoice.rst @@ -86,7 +86,7 @@ Sale 5 products with shipment method on invoice:: >>> sale.click('confirm') >>> sale.click('process') >>> sale.state - u'processing' + 'processing' >>> len(sale.shipments) 0 >>> invoice, = sale.invoices 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://}