merge default doc-dc
authorDamien Correia
Thu, 12 Apr 2018 11:43:16 +0200
branchdoc-dc
changeset 253 146a0deffad8
parent 252 05af55de9eab (current diff)
parent 170 0013ddcfdc37 (diff)
child 254 1adc0ffda366
merge default
src/pyams_utils/__init__.py
--- a/src/pyams_utils/__init__.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/__init__.py	Thu Apr 12 11:43:16 2018 +0200
@@ -21,11 +21,25 @@
 # import interfaces
 
 # import packages
+from zope.schema.fieldproperty import FieldProperty
 
 from pyramid.i18n import TranslationStringFactory
 _ = TranslationStringFactory('pyams_utils')
 
 
+def get_field_doc(self):
+    field = self._FieldProperty__field
+    if field.title and field.description:
+        return '{0}: {1}'.format(field.title, field.description)
+    elif field.title:
+        return field.title
+    else:
+        return super(self.__class__, self).__doc__
+
+
+FieldProperty.__doc__ = property(get_field_doc)
+
+
 def includeme(config):
     """pyams_utils features include"""
     from .include import include_package
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_utils/cache.py	Thu Apr 12 11:43:16 2018 +0200
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+
+# import standard library
+
+# import interfaces
+from persistent.interfaces import IPersistent
+from pyams_utils.interfaces import ICacheKeyValue
+
+# import packages
+from pyams_utils.adapter import adapter_config
+
+
+@adapter_config(context=object, provides=ICacheKeyValue)
+def object_cache_key_adapter(obj):
+    return str(id(obj))
+
+
+@adapter_config(context=str, provides=ICacheKeyValue)
+def string_cache_key_adapter(obj):
+    return obj
+
+
+@adapter_config(context=IPersistent, provides=ICacheKeyValue)
+def persistent_cache_key_adapter(obj):
+    return str(int.from_bytes(obj._p_oid, byteorder='big'))
--- a/src/pyams_utils/property.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/property.py	Thu Apr 12 11:43:16 2018 +0200
@@ -18,25 +18,6 @@
 # import interfaces
 
 # import packages
-from zope.schema.fieldproperty import FieldProperty
-
-
-class DocFieldProperty(FieldProperty):
-    """Field property with doc
-
-    This field property class extracts it's docstring from parent field description, if any.
-    It's main purpose is for documentation needs.
-    """
-
-    @property
-    def __doc__(self):
-        field = self._FieldProperty__field
-        if field.title and field.description:
-            return '{0}: {1}'.format(field.title, field.description)
-        elif field.title:
-            return field.title
-        else:
-            return super(FieldProperty, self).__doc__
 
 
 class cached(object):
--- a/src/pyams_utils/site.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/site.py	Thu Apr 12 11:43:16 2018 +0200
@@ -17,7 +17,7 @@
 
 # import interfaces
 from pyams_utils.interfaces import PYAMS_APPLICATION_SETTINGS_KEY, PYAMS_APPLICATION_DEFAULT_NAME, \
-    PYAMS_APPLICATION_FACTORY_KEY
+    PYAMS_APPLICATION_FACTORY_KEY, PUBLIC_PERMISSION
 from pyams_utils.interfaces.site import ISiteRoot, ISiteRootFactory, INewLocalSiteCreatedEvent, ISiteUpgradeEvent, \
     ISiteGenerations, SITE_GENERATIONS_KEY, IConfigurationManager
 from zope.annotation.interfaces import IAnnotations
@@ -30,7 +30,7 @@
 from pyams_utils.registry import get_utilities_for, query_utility
 from pyramid.exceptions import NotFound
 from pyramid.path import DottedNameResolver
-from pyramid.security import Allow, ALL_PERMISSIONS
+from pyramid.security import Allow, Everyone, ALL_PERMISSIONS
 from pyramid.threadlocal import get_current_registry
 from pyramid_zodbconn import get_connection
 from zope.container.folder import Folder
@@ -47,10 +47,13 @@
     A site root can be used as base application root in your ZODB.
     It's also site root responsibility to manage your local site manager.
 
-    BaseSiteRoot defines a basic ACL which gives all permissions to system administrator.
+    BaseSiteRoot defines a basic ACL which gives all permissions to system administrator,
+    and 'public' permission to everyone. But this ACL is generally overriden in subclasses
+    which also inherit from :class:`pyams_security.security.ProtectedObject`.
     """
 
-    __acl__ = [(Allow, 'system:admin', ALL_PERMISSIONS)]
+    __acl__ = [(Allow, 'system:admin', ALL_PERMISSIONS),
+               (Allow, Everyone, {PUBLIC_PERMISSION})]
 
     config_klass = None
 
--- a/src/pyams_utils/timezone/utility.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/timezone/utility.py	Thu Apr 12 11:43:16 2018 +0200
@@ -21,17 +21,17 @@
 
 # import packages
 from persistent import Persistent
-from pyams_utils.property import DocFieldProperty
 from pyams_utils.registry import utility_config
 from pyams_utils.site import check_required_utilities
 from zope.container.contained import Contained
 from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
 
 
 @implementer(IServerTimezone)
 class ServerTimezoneUtility(Persistent, Contained):
 
-    timezone = DocFieldProperty(IServerTimezone['timezone'])
+    timezone = FieldProperty(IServerTimezone['timezone'])
 
 
 REQUIRED_UTILITIES = ((IServerTimezone, '', ServerTimezoneUtility, 'Server timezone'),)
--- a/src/pyams_utils/zmi/timezone.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/zmi/timezone.py	Thu Apr 12 11:43:16 2018 +0200
@@ -35,6 +35,8 @@
 class ServerTimezonePropertiesEditForm(AdminDialogEditForm):
     """Server timezone properties edit form"""
 
+    prefix = 'timezone_properties.'
+
     legend = _("Update server timezone properties")
     fields = field.Fields(IServerTimezone)
     ajax_handler = 'properties.json'
--- a/src/pyams_utils/zmi/zeo.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/zmi/zeo.py	Thu Apr 12 11:43:16 2018 +0200
@@ -117,6 +117,8 @@
 class ZEOConnectionPropertiesEditForm(AdminDialogEditForm):
     """ZEO connection properties edit form"""
 
+    prefix = 'zeo_properties.'
+
     @property
     def title(self):
         translate = self.request.localizer.translate
@@ -218,14 +220,18 @@
         settings = '{0}\n\n'.format(pprint.pformat(self.context.get_settings()))
         status, arguments = changes
         if status == 200:
-            return {'status': 'success',
-                    'content': {'html': '{0}<br />{1}'.format(settings, arguments)},
-                    'close_form': False}
+            return {
+                'status': 'success',
+                'content': {'html': '{0}<br />{1}'.format(settings, arguments)},
+                'close_form': False
+            }
         else:
             typ, value, tb = arguments
             message = 'An error occurred: {type}<br />{message}'.format(type=typ,
                                                                         message='<br />'.join(
                                                                             traceback.format_exception(typ, value, tb)))
-            return {'status': 'info',
-                    'content': {'html': '{0}<br />{1}'.format(settings, message)},
-                    'close_form': False}
+            return {
+                'status': 'info',
+                'content': {'html': '{0}<br />{1}'.format(settings, message)},
+                'close_form': False
+            }
--- a/src/pyams_utils/zodb.py	Mon Apr 09 17:05:53 2018 +0200
+++ b/src/pyams_utils/zodb.py	Thu Apr 12 11:43:16 2018 +0200
@@ -17,7 +17,6 @@
 
 # import interfaces
 from persistent.interfaces import IPersistent
-from pyams_utils.interfaces import ICacheKeyValue
 from pyams_utils.interfaces.site import IOptionalUtility
 from pyams_utils.interfaces.zeo import IZEOConnection
 from transaction.interfaces import ITransactionManager
@@ -28,7 +27,6 @@
 # import packages
 from persistent import Persistent
 from pyams_utils.adapter import adapter_config
-from pyams_utils.property import DocFieldProperty
 from pyams_utils.registry import get_utilities_for, get_global_registry
 from pyams_utils.vocabulary import vocabulary_config
 from pyramid.events import subscriber
@@ -37,6 +35,7 @@
 from zope.container.contained import Contained
 from zope.interface import implementer
 from zope.schema import getFieldNames
+from zope.schema.fieldproperty import FieldProperty
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
 
@@ -71,16 +70,6 @@
         # recent spelling.
 
 
-@adapter_config(context=object, provides=ICacheKeyValue)
-def object_key_adapter(obj):
-    return str(id(obj))
-
-
-@adapter_config(context=str, provides=ICacheKeyValue)
-def string_key_adapter(obj):
-    return obj
-
-
 #
 # ZEO connection management
 #
@@ -113,15 +102,15 @@
     _db = None
     _connection = None
 
-    name = DocFieldProperty(IZEOConnection['name'])
-    server_name = DocFieldProperty(IZEOConnection['server_name'])
-    server_port = DocFieldProperty(IZEOConnection['server_port'])
-    storage = DocFieldProperty(IZEOConnection['storage'])
-    username = DocFieldProperty(IZEOConnection['username'])
-    password = DocFieldProperty(IZEOConnection['password'])
-    server_realm = DocFieldProperty(IZEOConnection['server_realm'])
-    blob_dir = DocFieldProperty(IZEOConnection['blob_dir'])
-    shared_blob_dir = DocFieldProperty(IZEOConnection['shared_blob_dir'])
+    name = FieldProperty(IZEOConnection['name'])
+    server_name = FieldProperty(IZEOConnection['server_name'])
+    server_port = FieldProperty(IZEOConnection['server_port'])
+    storage = FieldProperty(IZEOConnection['storage'])
+    username = FieldProperty(IZEOConnection['username'])
+    password = FieldProperty(IZEOConnection['password'])
+    server_realm = FieldProperty(IZEOConnection['server_realm'])
+    blob_dir = FieldProperty(IZEOConnection['blob_dir'])
+    shared_blob_dir = FieldProperty(IZEOConnection['shared_blob_dir'])
 
     def get_settings(self):
         """Get mapping of all connection settings