plone.api/read_only: code conventions and import fixes (+2 squashed commits)
Alexander Loechel <jenkins-z4DKO/[email protected]>
| Newsgroups | gmane.comp.web.zope.plone.cvs |
|---|---|
| Message-ID | <[email protected]> |
Repository: plone.api Branch: refs/heads/read_only Date: 2017-07-20T02:18:14+02:00 Author: Alexander Loechel (loechel) <[email protected]> Commit: https://github.com/plone/plone.api/commit/d3e5759255138716e0f03f216537e509a3f9a476 code conventions and import fixes (+2 squashed commits) Squashed commits: [9e475c1] code conventions [cee94e5] implement read-only check Files changed: A .editorconfig A plone-5.1.x.cfg A tox.ini M .gitignore M .travis.yml M buildout.cfg M docs/env.rst M setup.cfg M setup.py M src/plone/api/env.py M src/plone/api/portal.py M src/plone/api/tests/test_env.py M src/plone/api/tests/test_user.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c3b9a3c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.{py,cfg}] +indent_size = 4 + +[Makefile] +indent_style = tab diff --git a/.gitignore b/.gitignore index 0a7685c..7cd320c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,7 @@ /share/ /src/plone.api.egg-info/ /var/ +pip-selfcheck.json +/.tox/ +/_build/ +/reports/ diff --git a/.travis.yml b/.travis.yml index 717a83e..3cc8395 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ cache: env: - PLONE_VERSION=4.3 - PLONE_VERSION=5.0 +- PLONE_VERSION=5.1 global: - secure: "nTXMNU2aYbCtvKD74PndF8Xm2h6IvsxPjr6vj45AxjXmaB7Wf5oGi/4b6ObV\nexBtUQkFnc+M0ThGyUznOCPi3YxcbTzsyhQYhHUtmtw/6QRyYgo4E0GLDItU\n37Ff6wpxl3NMMJTvpi6SOVUvIJUl3+cs+4bkMkS48RSFGg2rGmo=" # Coveralls.io token matrix: diff --git a/buildout.cfg b/buildout.cfg index 02bdfa7..caaf609 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -3,7 +3,7 @@ extends = https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg plone-4.3.x.cfg package-name = plone.api -package-extras = [test] +package-extras = [develop, test] test-eggs = Pillow parts += omelette diff --git a/docs/env.rst b/docs/env.rst index 5ec6b05..1b8f846 100644 --- a/docs/env.rst +++ b/docs/env.rst @@ -109,12 +109,17 @@ Read-Only mode To know if your Zope / Plone instance is running on a read-only ZODB connection use :meth:`api.env.read_only_mode`. +**Use-Case:** +If you run a ZRS or RelStorage cluster with active replication where all replicas are read-only be default. +You could check if your instance is connected to a read only ZODB or a writeable ZODB. +Therefore you could adjust the UI to prevent create, delete or update pages are shown. + .. code-block:: python from plone import api - in_test_mode = api.env.read_only_mode() - if in_test_mode: + is_read_only = api.env.read_only_mode() + if is_read_only: pass # do something diff --git a/plone-5.1.x.cfg b/plone-5.1.x.cfg new file mode 100644 index 0000000..d32ca7a --- /dev/null +++ b/plone-5.1.x.cfg @@ -0,0 +1,6 @@ +[buildout] +test-eggs += + plone.app.contenttypes + +[versions] +plone.api = diff --git a/setup.cfg b/setup.cfg index 927666e..9a377df 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,3 +2,21 @@ ignore = *.cfg .travis.yml + +[isort] +force_alphabetical_sort=True +force_single_line=True +lines_after_imports=2 +line_length=200 +not_skip=__init__.py + +[coverage:run] +branch = True +source = src +omit = + +[coverage:report] +precision = 2 + +[coverage:html] +directory = reports/coverage diff --git a/setup.py b/setup.py index 65958a6..4dc60a5 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- + from setuptools import find_packages from setuptools import setup @@ -8,6 +9,7 @@ def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() + long_description = \ read('README.rst') + '\n\n' + \ read('CHANGES.rst') + '\n\n' + \ diff --git a/src/plone/api/env.py b/src/plone/api/env.py index 1acf4a9..32d81fb 100644 --- a/src/plone/api/env.py +++ b/src/plone/api/env.py @@ -13,6 +13,7 @@ from plone.api.validation import required_parameters from zope.globalrequest import getRequest +import Globals import traceback @@ -206,9 +207,12 @@ def read_only_mode(): :Example: :ref:`env_read_only_mode_example` """ - conn = Globals.DB.open() - isReadOnly = conn.isReadOnly() - conn.close() + isReadOnly = True + try: + conn = Globals.DB.open() + isReadOnly = conn.isReadOnly() + finally: + conn.close() return isReadOnly diff --git a/src/plone/api/portal.py b/src/plone/api/portal.py index dec94a8..dd70632 100644 --- a/src/plone/api/portal.py +++ b/src/plone/api/portal.py @@ -255,7 +255,7 @@ def show_message(message=None, request=None, type='info'): :param message: [required] Message to show. :type message: string :param request: [required] Request. - :type request: TODO: hm? + :type request: TODO: hm? # NOQA: T000 :param type: Message type. Possible values: 'info', 'warn', 'error' :type type: string :raises: diff --git a/src/plone/api/tests/test_env.py b/src/plone/api/tests/test_env.py index 1e16351..7b27fb5 100644 --- a/src/plone/api/tests/test_env.py +++ b/src/plone/api/tests/test_env.py @@ -402,6 +402,12 @@ def test_test_mode(self): from plone.api.env import test_mode self.assertEqual(test_mode(), True) + def test_read_only_mode(self): + """Test that read_only_mode() returns False + as we have a write enabled ZODB.""" + from plone.api.env import read_only_mode + self.assertFalse(read_only_mode()) + def test_plone_version(self): """Tests that plone_version() returns Plone version.""" from plone.api.env import plone_version diff --git a/src/plone/api/tests/test_user.py b/src/plone/api/tests/test_user.py index 712cabe..9b22efa 100644 --- a/src/plone/api/tests/test_user.py +++ b/src/plone/api/tests/test_user.py @@ -323,7 +323,7 @@ def test_get_roles_no_parameters(self): def test_get_permissions_no_parameters(self): """Test get_permissions passing no parameters.""" - self.assertEqual( # TODO: maybe assertItemsEqual? + self.assertEqual( # TODO: maybe assertItemsEqual? # NOQA: T000 set(p[0] for p in getPermissions()), set(api.user.get_permissions().keys()) ) diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..ef559bb --- /dev/null +++ b/tox.ini @@ -0,0 +1,123 @@ +[tox] +envlist = + py27-Plone-{4.3,5.0,5.1}, + isort, + flake8, + docs, + coverage-report, + +skip_missing_interpreters = false + +[testenv] +skip_install = True + +basepython: + py27: python2.7 + +extras = + test + +Plone-4.3: + commands = + mkdir -p {toxinidir}/reports/coverage + {envbindir}/buildout -c {toxinidir}/plone-4.3.x.cfg buildout:directory={envdir} buildout:develop={toxinidir} bootstrap + {envbindir}/buildout -c {toxinidir}/plone-4.3.x.cfg buildout:directory={envdir} buildout:develop={toxinidir} + coverage run {envbindir}/test -v1 --auto-color {posargs} +Plone-5.0: + commands = + mkdir -p {toxinidir}/reports/coverage + {envbindir}/buildout -c {toxinidir}/plone-5.0.x.cfg buildout:directory={envdir} buildout:develop={toxinidir} bootstrap + {envbindir}/buildout -c {toxinidir}/plone-5.0.x.cfg buildout:directory={envdir} buildout:develop={toxinidir} + coverage run {envbindir}/test -v1 --auto-color {posargs} +Plone-5.1: + commands = + mkdir -p {toxinidir}/reports/coverage + {envbindir}/buildout -c {toxinidir}/plone-5.1.x.cfg buildout:directory={envdir} buildout:develop={toxinidir} bootstrap + {envbindir}/buildout -c {toxinidir}/plone-5.1.x.cfg buildout:directory={envdir} buildout:develop={toxinidir} + coverage run {envbindir}/test -v1 --auto-color {posargs} + +setenv = + COVERAGE_FILE=.coverage.{envname} + +deps = + pdbpp + setuptools==33.1.1 + zc.buildout==2.8.0 + coverage + +whitelist_externals = + mkdir + +[testenv:coverage-report] +basepython = python2.7 +deps = coverage + +setenv = + COVERAGE_FILE=.coverage + +skip_install = true + +commands = + coverage erase + coverage combine + coverage report + coverage html + coverage xml + +[testenv:flake8] +basepython = python2.7 +skip_install = true + +deps = + flake8 + flake8-html + flake8-coding + flake8-debugger + flake8-deprecated + flake8-isort + flake8-pep3101 + flake8-plone-hasattr + flake8-polyfill + flake8-print + flake8-quotes + flake8-string-format + flake8-todo + +commands = + mkdir -p {toxinidir}/reports/flake8 + - flake8 --format=html --htmldir={toxinidir}/reports/flake8 src setup.py + flake8 src setup.py + +whitelist_externals = + mkdir + +[testenv:isort] +basepython = python2.7 +skip_install = true + +deps = + isort + +commands = + isort --check-only --recursive {toxinidir}/src + +[testenv:isort-apply] +basepython = python2.7 +skip_install = true + +deps = + isort + +commands = + isort --apply --recursive {toxinidir}/src + + +[testenv:docs] +basepython = python2.7 +skip_install = false + +deps = + Sphinx + +commands = + sphinx-build -b html -d _build/docs/doctrees docs _build/docs/html ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot