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 94d01a64ec..585fc68878 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ +* Remove support for Python 2.7 + Version 4.8.0 - 2018-04-23 * Bug fixes (see mercurial logs for details) Version 4.6.0 - 2017-10-30 -* Initial release \ No newline at end of file +* Initial release diff --git a/INSTALL b/INSTALL index 16cfa7c539..5249cd805d 100644 --- a/INSTALL +++ b/INSTALL @@ -4,7 +4,7 @@ Installing trytond_sale_payment 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_account_payment (http://www.tryton.org/) diff --git a/account.py b/account.py index 61092a946b..67a50142f0 100644 --- a/account.py +++ b/account.py @@ -24,8 +24,7 @@ def sale_payment_confirm(func): return wrapper -class Payment: - __metaclass__ = PoolMeta +class Payment(metaclass=PoolMeta): __name__ = 'account.payment' @classmethod @@ -90,8 +89,7 @@ class Payment: pass -class Invoice: - __metaclass__ = PoolMeta +class Invoice(metaclass=PoolMeta): __name__ = 'account.invoice' def add_payments(self, payments=None): diff --git a/sale.py b/sale.py index 66d998e563..0e5f6b0b5a 100644 --- a/sale.py +++ b/sale.py @@ -23,8 +23,7 @@ def no_payment(error): return decorator -class Sale: - __metaclass__ = PoolMeta +class Sale(metaclass=PoolMeta): __name__ = 'sale.sale' payments = fields.One2Many( 'account.payment', 'origin', "Payments", diff --git a/setup.py b/setup.py index 071a1b8092..72f51331f6 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')) @@ -103,7 +101,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 :: Financial :: Accounting', ], license='GPL-3', + python_requires='>=3.4', install_requires=requires, dependency_links=dependency_links, zip_safe=False, @@ -123,6 +121,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_payment.rst'], ) diff --git a/tests/scenario_sale_payment.rst b/tests/scenario_sale_payment.rst index 71b6d2dfee..a706707458 100644 --- a/tests/scenario_sale_payment.rst +++ b/tests/scenario_sale_payment.rst @@ -83,7 +83,7 @@ Create a sale quotation:: >>> sale.total_amount Decimal('100.00') >>> sale.state - u'quotation' + 'quotation' Create a partial payment:: @@ -96,7 +96,7 @@ Create a partial payment:: >>> payment.amount = Decimal('40.00') >>> payment.click('approve') >>> payment.state - u'approved' + 'approved' Attempt to put sale back to draft:: @@ -105,7 +105,7 @@ Attempt to put sale back to draft:: ... UserError: ... >>> sale.state - u'quotation' + 'quotation' Attempt to cancel sale:: @@ -114,7 +114,7 @@ Attempt to cancel sale:: ... UserError: ... >>> sale.state - u'quotation' + 'quotation' Revert sale to draft after failed payment:: @@ -122,10 +122,10 @@ Revert sale to draft after failed payment:: >>> process_payment.execute('process') >>> payment.click('fail') >>> payment.state - u'failed' + 'failed' >>> sale.click('draft') >>> sale.state - u'draft' + 'draft' Attempt to add a second payment to draft sale:: @@ -144,7 +144,7 @@ Cancel the sale:: >>> sale.click('cancel') >>> sale.state - u'cancel' + 'cancel' Attempt to add a second payment to the cancelled sale:: @@ -164,14 +164,14 @@ Revive the sale:: >>> sale.click('draft') >>> sale.click('quote') >>> sale.state - u'quotation' + 'quotation' Change the first payment to succeed:: >>> payment, = sale.payments >>> payment.click('succeed') >>> sale.state - u'quotation' + 'quotation' Create and process a final payment:: @@ -190,7 +190,7 @@ The sale should be confirmed:: >>> sale.reload() >>> sale.state - u'confirmed' + 'confirmed' Post the invoice and check amount to pay:: @@ -202,11 +202,11 @@ Post the invoice and check amount to pay:: >>> invoice.amount_to_pay == Decimal(0) True >>> invoice.state - u'paid' + 'paid' Fail one payment and check invoice is no more paid:: >>> payment.click('fail') >>> invoice.reload() >>> invoice.state - u'posted' + 'posted' 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://}