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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.