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 38754a58a4..efd58c1304 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) @@ -11,4 +13,4 @@ Version 4.2.0 - 2016-11-28 * Bug fixes (see mercurial logs for details) Version 4.0.0 - 2016-05-02 -* Initial release \ No newline at end of file +* Initial release diff --git a/INSTALL b/INSTALL index eadd5f2060..1fa9c23876 100644 --- a/INSTALL +++ b/INSTALL @@ -4,7 +4,7 @@ Installing trytond_production_routing 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_production (http://www.tryton.org/) diff --git a/production.py b/production.py index 15aeb0ff7d..e6f960d7eb 100644 --- a/production.py +++ b/production.py @@ -12,8 +12,7 @@ from trytond.transaction import Transaction __all__ = ['Production'] -class Production: - __metaclass__ = PoolMeta +class Production(metaclass=PoolMeta): __name__ = 'production' work_center = fields.Many2One('production.work.center', 'Work Center', states={ diff --git a/routing.py b/routing.py index 5ab4364467..8e625c35e4 100644 --- a/routing.py +++ b/routing.py @@ -6,15 +6,13 @@ from trytond.model import fields __all__ = ['Operation', 'RoutingStep'] -class Operation: - __metaclass__ = PoolMeta +class Operation(metaclass=PoolMeta): __name__ = 'production.routing.operation' work_center_category = fields.Many2One('production.work.center.category', 'Work Center Category') -class RoutingStep: - __metaclass__ = PoolMeta +class RoutingStep(metaclass=PoolMeta): __name__ = 'production.routing.step' def get_work(self, production, work_center_picker): diff --git a/setup.py b/setup.py index c70e4da72a..d60ca822d9 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')) @@ -102,7 +100,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', ], 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_production_work.rst', - ], ) diff --git a/tests/scenario_production_work.rst b/tests/scenario_production_work.rst index fb658b928a..66a47242b5 100644 --- a/tests/scenario_production_work.rst +++ b/tests/scenario_production_work.rst @@ -143,7 +143,7 @@ Create an Inventory:: >>> inventory_line2.quantity = 10 >>> inventory.click('confirm') >>> inventory.state - u'done' + 'done' Make a production:: @@ -156,7 +156,7 @@ Make a production:: >>> production.quantity = 1 >>> production.click('wait') >>> production.state - u'waiting' + 'waiting' >>> production.cost Decimal('2.0000') @@ -168,13 +168,13 @@ Test works:: >>> work1.work_center == center1 True >>> work1.state - u'request' + 'request' >>> work2.operation == operation2 True >>> work2.work_center == center2 True >>> work2.state - u'request' + 'request' Run the production:: @@ -182,49 +182,49 @@ Run the production:: True >>> production.click('run') >>> production.state - u'running' + 'running' Test works:: >>> work1, work2 = production.works >>> work1.state - u'draft' + 'draft' >>> work2.state - u'draft' + 'draft' Run works:: >>> cycle1 = work1.cycles.new() >>> cycle1.click('run') >>> cycle1.state - u'running' + 'running' >>> work1.reload() >>> work1.state - u'running' + 'running' >>> cycle1.click('do') >>> cycle1.state - u'done' + 'done' >>> work1.reload() >>> work1.state - u'finished' + 'finished' >>> cycle2 = work2.cycles.new() >>> cycle2.click('cancel') >>> cycle2.state - u'cancelled' + 'cancelled' >>> work2.reload() >>> work2.state - u'draft' + 'draft' >>> cycle2 = work2.cycles.new() >>> cycle2.click('run') >>> cycle2.state - u'running' + 'running' >>> cycle2.duration = datetime.timedelta(hours=1) >>> cycle2.click('do') >>> cycle2.state - u'done' + 'done' >>> work2.reload() >>> work2.state - u'finished' + 'finished' Add an extra work:: @@ -235,7 +235,7 @@ Add an extra work:: >>> work2b = production.works[-1] >>> work2b.state - u'draft' + 'draft' And delete the extra work:: @@ -251,5 +251,5 @@ Do the production:: >>> production.click('done') >>> production.state - u'done' + 'done' 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://}