Commit 9943ce81 authored by Aurel's avatar Aurel Committed by Jérome Perrin

WIP: zope4 on python patches from Aurel (+changes from jerome)

build on zope4

wip : patches

update patches

reactivatee some patches & egg and remove dep to old ZSQLMEthod

fix zope patch

add Sessions product

reintroduce reStructuredText

use ExternalEditor compatible with Zope4

reinstroduce the config of _Z2PORT and _Z2HOST for testing

fix patch ?

add CMFDefault

Revert "add CMFDefault"

This reverts commit 3e3545ebd02fa188f4265301bbbf6b6b0f0dad9b.

pin eggs version

jerome: stop allowing version picking and pin versions
parent 6c6bfdd5
diff -Naur Acquisition-4.7.orig/src/Acquisition/_Acquisition.c Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition/_Acquisition.c
--- Acquisition-4.7.orig/src/Acquisition/_Acquisition.c 2021-03-17 16:22:28.266539592 +0100
+++ Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition/_Acquisition.c 2021-03-17 16:28:59.609842948 +0100
@@ -543,6 +543,64 @@
}
static PyObject *
+Wrapper_GetAttr(PyObject *self, PyObject *attr_name, PyObject *orig)
+{
+ /* This function retrieves an attribute from an object by PyObject_GetAttr.
+
+ The main difference between Wrapper_GetAttr and PyObject_GetAttr is that
+ Wrapper_GetAttr calls _aq_dynamic to generate an attribute dynamically, if
+ the attribute is not found.
+ */
+ PyObject *r, *v, *tb;
+ PyObject *d, *m;
+ PyObject *o;
+
+ if (isWrapper (self))
+ o = WRAPPER(self)->obj;
+ else
+ o = self;
+
+ /* Try to get an attribute in the normal way first. */
+ r = PyObject_GetAttr(o, attr_name);
+ if (r)
+ return r;
+
+ /* If an unexpected error happens, return immediately. */
+ PyErr_Fetch(&r,&v,&tb);
+ if (r != PyExc_AttributeError)
+ {
+ PyErr_Restore(r,v,tb);
+ return NULL;
+ }
+
+ /* Try to get _aq_dynamic. */
+ m = PyObject_GetAttrString(o, "_aq_dynamic");
+ if (! m) {
+ PyErr_Restore(r,v,tb);
+ return NULL;
+ }
+
+ /* Call _aq_dynamic in the context of the original acquisition wrapper. */
+ if (PyECMethod_Check(m) && PyECMethod_Self(m)==o)
+ ASSIGN(m,PyECMethod_New(m,OBJECT(self)));
+ else if (has__of__(m)) ASSIGN(m,__of__(m,OBJECT(self)));
+ d = PyObject_CallFunction(m, "O", attr_name);
+ Py_DECREF(m);
+
+ /* In the case of None, assume that the attribute is not found. */
+ if (d == Py_None) {
+ Py_DECREF(d);
+ PyErr_Restore(r,v,tb);
+ return NULL;
+ }
+
+ Py_XDECREF(r);
+ Py_XDECREF(v);
+ Py_XDECREF(tb);
+ return d;
+}
+
+static PyObject *
Wrapper_acquire(Wrapper *self, PyObject *oname,
PyObject *filter, PyObject *extra, PyObject *orig,
int explicit, int containment);
@@ -677,8 +735,8 @@
return NULL;
}
- /* normal attribute lookup */
- else if ((r = PyObject_GetAttr(self->obj, oname))) {
+ /* Give _aq_dynamic a chance, then normal attribute lookup */
+ else if ((r = Wrapper_GetAttr(OBJECT(self), oname, orig))) {
if (r == Acquired) {
Py_DECREF(r);
return Wrapper_acquire(
@@ -806,7 +864,7 @@
return NULL;
}
- if ((r = PyObject_GetAttr(self->container, oname)) == NULL) {
+ if ((r = Wrapper_GetAttr(self->container, oname, orig)) == NULL) {
/* May be AttributeError or some other kind of error */
return NULL;
}
@@ -830,7 +888,7 @@
static PyObject *
Wrapper_getattro(Wrapper *self, PyObject *oname)
{
- return Wrapper_findattr(self, oname, NULL, NULL, NULL, 1, 1, 0, 0);
+ return Wrapper_findattr(self, oname, NULL, NULL, OBJECT(self), 1, 1, 0, 0);
}
static PyObject *
@@ -846,7 +904,7 @@
if (STR_EQ(PyBytes_AS_STRING(tmp), "acquire")) {
result = Py_FindAttr(OBJECT(self), oname);
} else {
- result = Wrapper_findattr(self, oname, NULL, NULL, NULL, 1, 0, 0, 0);
+ result = Wrapper_findattr(self, oname, NULL, NULL, OBJECT(self), 1, 0, 0, 0);
}
Py_DECREF(tmp);
diff -Naur Acquisition-4.7.orig/src/Acquisition/test_dynamic_acquisition.py Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition/test_dynamic_acquisition.py
--- Acquisition-4.7.orig/src/Acquisition/test_dynamic_acquisition.py 1970-01-01 01:00:00.000000000 +0100
+++ Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition/test_dynamic_acquisition.py 2021-03-17 16:30:07.082413986 +0100
@@ -0,0 +1,160 @@
+##############################################################################
+#
+# Copyright (c) 1996-2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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
+#
+##############################################################################
+import Acquisition
+
+def checkContext(self, o):
+ # Python equivalent to aq_inContextOf
+ from Acquisition import aq_base, aq_parent, aq_inner
+ subob = self
+ o = aq_base(o)
+ while 1:
+ if aq_base(subob) is o:
+ return True
+ self = aq_inner(subob)
+ if self is None: break
+ subob = aq_parent(self)
+ if subob is None: break
+ return False
+
+class B(Acquisition.Implicit):
+ color='red'
+
+ def __init__(self, name='b'):
+ self.name = name
+
+ def _aq_dynamic(self, attr):
+ if attr == 'bonjour': return None
+
+ def dynmethod():
+ chain = ' <- '.join(repr(obj) for obj in Acquisition.aq_chain(self))
+ print repr(self) + '.' + attr
+ print 'chain:', chain
+
+ return dynmethod
+
+ def __repr__(self):
+ return "%s(%r)" % (self.__class__.__name__, self.name)
+
+class A(Acquisition.Implicit):
+
+ def __init__(self, name='a'):
+ self.name = name
+
+ def hi(self):
+ print self, self.color
+
+ def _aq_dynamic(self, attr):
+ return None
+
+ def __repr__(self):
+ return "%s(%r)" % (self.__class__.__name__, self.name)
+
+def test_dynamic():
+ r'''
+ The _aq_dynamic functionality allows an object to dynamically provide an
+ attribute.
+
+ If an object doesn't have an attribute, Acquisition checks to see if the
+ object has a _aq_dynamic method, which is then called. It is functionally
+ equivalent to __getattr__, but _aq_dynamic is called with 'self' as the
+ acquisition wrapped object where as __getattr__ is called with self as the
+ unwrapped object.
+
+ Let's see how this works. In the examples below, the A class defines
+ '_aq_dynamic', but returns 'None' for all attempts, which means that no new
+ attributes should be generated dynamically. It also doesn't define 'color'
+ attribute, even though it uses it in the 'hi' method.
+
+ >>> A().hi()
+ Traceback (most recent call last):
+ ...
+ AttributeError: color
+
+ The class B, on the other hand, generates all attributes dynamically,
+ except if it is called 'bonjour'.
+
+ First we need to check that, even if an object provides '_aq_dynamic',
+ "regular" Aquisition attribute access should still work:
+
+ >>> b=B()
+ >>> b.a=A()
+ >>> b.a.hi()
+ A('a') red
+ >>> b.a.color='green'
+ >>> b.a.hi()
+ A('a') green
+
+ Now, let's see some dynamically generated action. B does not define a
+ 'salut' method, but remember that it dynamically generates a method for
+ every attribute access:
+
+ >>> b.a.salut()
+ B('b').salut
+ chain: B('b')
+
+ >>> a=A('a1')
+ >>> a.b=B('b1')
+ >>> a.b.salut()
+ B('b1').salut
+ chain: B('b1') <- A('a1')
+
+ >>> b.a.bonjour()
+ Traceback (most recent call last):
+ ...
+ AttributeError: bonjour
+
+ >>> a.b.bonjour()
+ Traceback (most recent call last):
+ ...
+ AttributeError: bonjour
+
+ '''
+
+def test_wrapper_comparissons():
+ r'''
+
+ Test wrapper comparisons in presence of _aq_dynamic
+
+ >>> b=B()
+ >>> b.a=A()
+ >>> foo = b.a
+ >>> bar = b.a
+ >>> assert( foo == bar )
+ >>> c = A('c')
+ >>> b.c = c
+ >>> b.c.d = c
+ >>> b.c.d == c
+ True
+ >>> b.c.d == b.c
+ True
+ >>> b.c == c
+ True
+
+ Test contextuality in presence of _aq_dynamic
+
+ >>> checkContext(b.c, b)
+ True
+ >>> checkContext(b.c, b.a)
+ False
+
+ >>> assert b.a.aq_inContextOf(b)
+ >>> assert b.c.aq_inContextOf(b)
+ >>> assert b.c.d.aq_inContextOf(b)
+ >>> assert b.c.d.aq_inContextOf(c)
+ >>> assert b.c.d.aq_inContextOf(b.c)
+ >>> assert not b.c.aq_inContextOf(foo)
+ >>> assert not b.c.aq_inContextOf(b.a)
+ >>> assert not b.a.aq_inContextOf('somestring')
+'''
+
diff -Naur Acquisition-4.7.orig/src/Acquisition/tests.py Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition/tests.py
--- Acquisition-4.7.orig/src/Acquisition/tests.py 2021-03-17 16:22:28.266539592 +0100
+++ Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition/tests.py 2021-03-17 16:31:31.971132854 +0100
@@ -3366,6 +3366,7 @@
suites = [
DocTestSuite(),
+ DocTestSuite('Acquisition.test_dynamic_acquisition'),
unittest.defaultTestLoader.loadTestsFromName(__name__),
]
diff -Naur Acquisition-4.7.orig/src/Acquisition.egg-info/SOURCES.txt Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition.egg-info/SOURCES.txt
--- Acquisition-4.7.orig/src/Acquisition.egg-info/SOURCES.txt 2021-03-17 16:22:28.262539558 +0100
+++ Acquisition-4.7-py2.7-linux-x86_64.egg/src/Acquisition.egg-info/SOURCES.txt 2021-03-17 16:32:31.619638229 +0100
@@ -15,9 +15,10 @@
src/Acquisition/__init__.py
src/Acquisition/interfaces.py
src/Acquisition/tests.py
+src/Acquisition/test_dynamic_acquisition.py
src/Acquisition.egg-info/PKG-INFO
src/Acquisition.egg-info/SOURCES.txt
src/Acquisition.egg-info/dependency_links.txt
src/Acquisition.egg-info/not-zip-safe
src/Acquisition.egg-info/requires.txt
-src/Acquisition.egg-info/top_level.txt
\ Pas de fin de ligne à la fin du fichier
+src/Acquisition.egg-info/top_level.txt
diff -Naur Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/DCWorkflow.py Products.DCWorkflow-2.4.1/Products/DCWorkflow/DCWorkflow.py
--- Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/DCWorkflow.py 2020-03-09 22:05:43.000000000 +0100
+++ Products.DCWorkflow-2.4.1/Products/DCWorkflow/DCWorkflow.py 2021-03-18 15:43:47.791236880 +0100
@@ -38,6 +38,7 @@
from Products.DCWorkflow.interfaces import IDCWorkflowDefinition
from Products.DCWorkflow.Transitions import TRIGGER_AUTOMATIC
from Products.DCWorkflow.Transitions import TRIGGER_USER_ACTION
+from Products.DCWorkflow.Transitions import TRIGGER_WORKFLOW_METHOD
from Products.DCWorkflow.utils import Message as _
from Products.DCWorkflow.utils import modifyRolesForGroup
from Products.DCWorkflow.utils import modifyRolesForPermission
@@ -279,6 +280,52 @@
self._changeStateOf(ob, tdef, kw)
@security.private
+ def isWorkflowMethodSupported(self, ob, method_id):
+ '''
+ Returns a true value if the given workflow method
+ is supported in the current state.
+ '''
+ sdef = self._getWorkflowStateOf(ob)
+ if sdef is None:
+ return 0
+ if method_id in sdef.transitions:
+ tdef = self.transitions.get(method_id, None)
+ if (tdef is not None and
+ tdef.trigger_type == TRIGGER_WORKFLOW_METHOD and
+ self._checkTransitionGuard(tdef, ob)):
+ return 1
+ return 0
+
+ @security.private
+ def wrapWorkflowMethod(self, ob, method_id, func, args, kw):
+ '''
+ Allows the user to request a workflow action. This method
+ must perform its own security checks.
+ '''
+ sdef = self._getWorkflowStateOf(ob)
+ if sdef is None:
+ raise WorkflowException('Object is in an undefined state')
+ if method_id not in sdef.transitions:
+ raise Unauthorized(method_id)
+ tdef = self.transitions.get(method_id, None)
+ if tdef is None or tdef.trigger_type != TRIGGER_WORKFLOW_METHOD:
+ raise WorkflowException(
+ 'Transition %s is not triggered by a workflow method'
+ % method_id)
+ if not self._checkTransitionGuard(tdef, ob):
+ raise Unauthorized(method_id)
+ res = func(*args, **kw)
+ try:
+ self._changeStateOf(ob, tdef)
+ except ObjectDeleted:
+ # Re-raise with a different result.
+ raise ObjectDeleted(res)
+ except ObjectMoved as ex:
+ # Re-raise with a different result.
+ raise ObjectMoved(ex.getNewObject(), res)
+ return res
+
+ @security.private
def isInfoSupported(self, ob, name):
'''
Returns a true value if the given info name is supported.
diff -Naur Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/dtml/transition_properties.dtml Products.DCWorkflow-2.4.1/Products/DCWorkflow/dtml/transition_properties.dtml
--- Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/dtml/transition_properties.dtml 2020-03-09 22:05:43.000000000 +0100
+++ Products.DCWorkflow-2.4.1/Products/DCWorkflow/dtml/transition_properties.dtml 2021-03-18 15:37:55.144028451 +0100
@@ -56,6 +56,16 @@
</tr>
<tr>
+<th></th>
+<td>
+<dtml-let checked="trigger_type==2 and 'checked' or ' '">
+<input type="radio" name="trigger_type" value="2" &dtml-checked; />
+Initiated by WorkflowMethod
+</dtml-let>
+</td>
+</tr>
+
+<tr>
<th align="left">Script (before)</th>
<td>
<select name="script_name">
diff -Naur Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/dtml/transitions.dtml Products.DCWorkflow-2.4.1/Products/DCWorkflow/dtml/transitions.dtml
--- Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/dtml/transitions.dtml 2020-03-09 22:05:43.000000000 +0100
+++ Products.DCWorkflow-2.4.1/Products/DCWorkflow/dtml/transitions.dtml 2021-03-18 15:37:55.144028451 +0100
@@ -17,7 +17,8 @@
<td>
Destination state: <code><dtml-if new_state_id>&dtml-new_state_id;<dtml-else>(Remain in state)</dtml-if></code> <br />
Trigger: <dtml-var expr="(trigger_type == 0 and 'Automatic') or
- (trigger_type == 1 and 'User action')">
+ (trigger_type == 1 and 'User action') or
+ (trigger_type == 2 and 'WorkflowMethod')">
<br />
<dtml-if script_name>
Script (before): &dtml-script_name;
diff -Naur Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/exportimport.py Products.DCWorkflow-2.4.1/Products/DCWorkflow/exportimport.py
--- Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/exportimport.py 2020-03-09 22:05:43.000000000 +0100
+++ Products.DCWorkflow-2.4.1/Products/DCWorkflow/exportimport.py 2021-03-18 15:44:34.903667147 +0100
@@ -40,7 +40,7 @@
from Products.DCWorkflow.utils import _xmldir
-TRIGGER_TYPES = ('AUTOMATIC', 'USER')
+TRIGGER_TYPES = ('AUTOMATIC', 'USER', 'METHOD' )
_FILENAME = 'workflows.xml'
diff -Naur Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/Transitions.py Products.DCWorkflow-2.4.1/Products/DCWorkflow/Transitions.py
--- Products.DCWorkflow-2.4.1.orig/Products/DCWorkflow/Transitions.py 2020-03-09 22:05:43.000000000 +0100
+++ Products.DCWorkflow-2.4.1/Products/DCWorkflow/Transitions.py 2021-03-18 15:37:55.148028486 +0100
@@ -31,6 +31,7 @@
TRIGGER_AUTOMATIC = 0
TRIGGER_USER_ACTION = 1
+TRIGGER_WORKFLOW_METHOD = 2
class TransitionDefinition(SimpleItem):
This diff is collapsed.
...@@ -59,9 +59,10 @@ extends = ...@@ -59,9 +59,10 @@ extends =
../../component/wendelin.core/buildout.cfg ../../component/wendelin.core/buildout.cfg
../../component/jupyter-py2/buildout.cfg ../../component/jupyter-py2/buildout.cfg
../../stack/caucase/buildout.cfg ../../stack/caucase/buildout.cfg
../../software/neoppod/software-common.cfg ../../software/neoppod/software-zodb5.cfg
# keep neoppod extends last # keep neoppod extends last
parts += parts +=
erp5-util-develop erp5-util-develop
slapos-cookbook slapos-cookbook
...@@ -333,8 +334,9 @@ wcfs-enable-default = false ...@@ -333,8 +334,9 @@ wcfs-enable-default = false
[erp5] [erp5]
recipe = slapos.recipe.build:gitclone recipe = slapos.recipe.build:gitclone
repository = https://lab.nexedi.com/nexedi/erp5.git repository = https://lab.nexedi.com/nexedi/erp5.git
branch = master branch = zope4py2
git-executable = ${git:location}/bin/git git-executable = ${git:location}/bin/git
develop = true
[testrunner] [testrunner]
# XXX: Workaround for fact ERP5Type is not an distribution and does not # XXX: Workaround for fact ERP5Type is not an distribution and does not
...@@ -406,11 +408,23 @@ egg = ${:_buildout_section_name_} ...@@ -406,11 +408,23 @@ egg = ${:_buildout_section_name_}
<= zope-product-with-eggtestinfo <= zope-product-with-eggtestinfo
[Products.DCWorkflow] [Products.DCWorkflow]
<= zope-product-with-eggtestinfo <= zope-product-with-eggtestinfo
Products.DCWorkflow-patches = ${:_profile_base_location_}/../../component/egg-patch/Products.DCWorkflow/workflow_method.patch#975b49e96bae33ac8563454fe5fa9899 Products.DCWorkflow-patches = ${:_profile_base_location_}/../../component/egg-patch/Products.DCWorkflow/workflow_method-2.4.1.patch#ec7bb56a9f1d37fcbf960cd1e96e6e6d
Products.DCWorkflow-patch-options = -p1 Products.DCWorkflow-patch-options = -p1
[Products.GenericSetup] [Products.GenericSetup]
<= zope-product-with-eggtestinfo <= zope-product-with-eggtestinfo
[egg-with-zope-proxy]
recipe = zc.recipe.egg:custom
setup-eggs =
zope.proxy
egg = ${:_buildout_section_name_}
[zope.security]
<= egg-with-zope-proxy
[zope.container]
<= egg-with-zope-proxy
setup-eggs +=
${persistent:egg}
[eggs] [eggs]
<= neoppod <= neoppod
eggs = ${neoppod:eggs} eggs = ${neoppod:eggs}
...@@ -493,6 +507,8 @@ eggs = ${neoppod:eggs} ...@@ -493,6 +507,8 @@ eggs = ${neoppod:eggs}
xlrd xlrd
# Zope # Zope
${zope.security:egg}
${zope.container:egg}
Zope2 Zope2
${tempstorage:egg} ${tempstorage:egg}
# Zope acquisition patch # Zope acquisition patch
...@@ -504,13 +520,8 @@ eggs = ${neoppod:eggs} ...@@ -504,13 +520,8 @@ eggs = ${neoppod:eggs}
Products.PluggableAuthService Products.PluggableAuthService
Products.PluginRegistry Products.PluginRegistry
# CMF 2.2 # CMF 2.3
${Products.CMFActionIcons:egg}
${Products.CMFCalendar:egg}
${Products.CMFCore:egg} ${Products.CMFCore:egg}
${Products.CMFDefault:egg}
${Products.CMFTopic:egg}
${Products.CMFUid:egg}
${Products.DCWorkflow:egg} ${Products.DCWorkflow:egg}
${Products.GenericSetup:egg} ${Products.GenericSetup:egg}
five.localsitemanager five.localsitemanager
...@@ -560,6 +571,20 @@ eggs = ${neoppod:eggs} ...@@ -560,6 +571,20 @@ eggs = ${neoppod:eggs}
strict-rfc3339 strict-rfc3339
jsonschema[format] jsonschema[format]
# Used by zope4
docutils
zLOG
Products.ZSQLMethods
ZServer
Products.ExternalMethod
Products.SiteErrorLog
tempstorage
Products.DCWorkflow
Products.Sessions
Record
# StructuredText
Zope
# parameterizing the version of the generated python interpreter name by the # parameterizing the version of the generated python interpreter name by the
# python section version causes dependency between this egg section and the # python section version causes dependency between this egg section and the
# installation of python, which we don't want on an instance # installation of python, which we don't want on an instance
...@@ -575,7 +600,6 @@ scripts = ...@@ -575,7 +600,6 @@ scripts =
tidstoraged tidstoraged
tidstorage_repozo tidstorage_repozo
wcfs wcfs
web_checker_utility
extra-paths = extra-paths =
${erp5:location} ${erp5:location}
...@@ -584,10 +608,17 @@ extra-paths = ...@@ -584,10 +608,17 @@ extra-paths =
patch-binary = ${patch:location}/bin/patch patch-binary = ${patch:location}/bin/patch
PyPDF2-patches = ${:_profile_base_location_}/../../component/egg-patch/PyPDF2/0001-Custom-implementation-of-warnings.formatwarning-remo.patch#d25bb0f5dde7f3337a0a50c2f986f5c8 PyPDF2-patches = ${:_profile_base_location_}/../../component/egg-patch/PyPDF2/0001-Custom-implementation-of-warnings.formatwarning-remo.patch#d25bb0f5dde7f3337a0a50c2f986f5c8
PyPDF2-patch-options = -p1 PyPDF2-patch-options = -p1
Acquisition-patches = ${:_profile_base_location_}/../../component/egg-patch/Acquisition/aq_dynamic.patch#1d9a56e9af4371f5b6951ebf217a15d7 Acquisition-patches = ${:_profile_base_location_}/../../component/egg-patch/Acquisition/Acquisition-4.7.patch#85b0090e216cead0fc86c5c274450d96
Acquisition-patch-options = -p1 Acquisition-patch-options = -p1
python-magic-patches = ${:_profile_base_location_}/../../component/egg-patch/python_magic/magic.patch#de0839bffac17801e39b60873a6c2068 python-magic-patches = ${:_profile_base_location_}/../../component/egg-patch/python_magic/magic.patch#de0839bffac17801e39b60873a6c2068
python-magic-patch-options = -p1 python-magic-patch-options = -p1
# Zope 4 patches
Zope-patches = ${:_profile_base_location_}/../../component/egg-patch/Zope/0001-OFS-XMLExportImport.patch#12a9b9db76b3cd9035b6032d516143e0
Zope-patch-options = -p1
[template-neo]
recipe =
template =
[eggs-all-scripts] [eggs-all-scripts]
recipe = zc.recipe.egg recipe = zc.recipe.egg
...@@ -621,13 +652,14 @@ depends = ...@@ -621,13 +652,14 @@ depends =
# neoppod, mysqlclient, slapos.recipe.template # neoppod, mysqlclient, slapos.recipe.template
# patched eggs # patched eggs
Acquisition = 2.13.12+SlapOSPatched001 Acquisition = 4.7+SlapOSPatched001
Products.DCWorkflow = 2.2.4+SlapOSPatched001 Products.DCWorkflow = 2.4.1+SlapOSPatched001
ocropy = 1.0+SlapOSPatched001 ocropy = 1.0+SlapOSPatched001
pysvn = 1.9.15+SlapOSPatched001 pysvn = 1.9.15+SlapOSPatched001
python-ldap = 2.4.32+SlapOSPatched001 python-ldap = 2.4.32+SlapOSPatched001
python-magic = 0.4.12+SlapOSPatched001 python-magic = 0.4.12+SlapOSPatched001
PyPDF2 = 1.26.0+SlapOSPatched001 PyPDF2 = 1.26.0+SlapOSPatched001
Zope = 4.5.3+SlapOSPatched001
## https://lab.nexedi.com/nexedi/slapos/merge_requests/648 ## https://lab.nexedi.com/nexedi/slapos/merge_requests/648
pylint = 1.4.4 pylint = 1.4.4
...@@ -640,11 +672,7 @@ zope.dottedname = 4.1.0 ...@@ -640,11 +672,7 @@ zope.dottedname = 4.1.0
SOAPpy = 0.12.0nxd001 SOAPpy = 0.12.0nxd001
# CMF 2.3 is not yet supported. # CMF 2.3 is not yet supported.
Products.CMFCalendar = 2.2.3 #Products.CMFCore = 2.2.10
Products.CMFCore = 2.2.10
Products.CMFDefault = 2.2.4
Products.CMFTopic = 2.2.1
Products.CMFUid = 2.2.1
# newer version requires zope.traversing>=4.0.0a2. # newer version requires zope.traversing>=4.0.0a2.
zope.app.appsetup = 3.16.0 zope.app.appsetup = 3.16.0
...@@ -661,8 +689,8 @@ Pillow = 6.2.2 ...@@ -661,8 +689,8 @@ Pillow = 6.2.2
Products.CMFActionIcons = 2.1.3 Products.CMFActionIcons = 2.1.3
Products.DCWorkflowGraph = 0.4.1 Products.DCWorkflowGraph = 0.4.1
# Products.ExternalEditor 2.0.0's dtml is not based on Zope2 OFS's one. # Products.ExternalEditor 2.0.0's dtml is not based on Zope2 OFS's one.
Products.ExternalEditor = 1.1.1 Products.ExternalEditor = 3.0.1
Products.GenericSetup = 1.8.6 #Products.GenericSetup = 1.8.6
Products.LongRequestLogger = 2.1.0 Products.LongRequestLogger = 2.1.0
# Products.MimetypesRegistry 2.1 requires AccessControl>=3.0.0Acquisition. # Products.MimetypesRegistry 2.1 requires AccessControl>=3.0.0Acquisition.
Products.MimetypesRegistry = 2.0.10 Products.MimetypesRegistry = 2.0.10
...@@ -727,7 +755,7 @@ xlrd = 1.1.0 ...@@ -727,7 +755,7 @@ xlrd = 1.1.0
# Re-add for as it is required to be there for uninstallation # Re-add for as it is required to be there for uninstallation
erp5.recipe.w3validator = 1.0.2 erp5.recipe.w3validator = 1.0.2
Products.ZSQLMethods = 2.13.5
fpconst = 0.7.2 fpconst = 0.7.2
graphviz = 0.5.2 graphviz = 0.5.2
olefile = 0.44 olefile = 0.44
...@@ -771,3 +799,26 @@ strict-rfc3339 = 0.7 ...@@ -771,3 +799,26 @@ strict-rfc3339 = 0.7
webcolors = 1.10 webcolors = 1.10
rfc3987 = 1.3.8 rfc3987 = 1.3.8
jsonpointer = 2.2 jsonpointer = 2.2
# WIP Zope 4 ⚠
zope.interface = 5.2.0
ZConfig = 3.5.0
Products.CMFCore = 2.4.0
Products.StandardCacheManagers = 4.1.0
Products.ZSQLMethods = 3.14
Products.ExternalMethod = 4.5
Products.GenericSetup = 2.1.5
Products.PythonScripts = 4.13
Products.MailHost = 4.11
Products.Sessions = 4.12
Products.SiteErrorLog = 5.5
Products.ZSQLMethods = 3.14
html5lib = 1.1
mechanize = 0.4.7
zLOG = 3.1
zope.password = 4.3.1
zope.error = 4.5.0
zope.authentication = 4.5.0
zope.session = 4.4.0
zope.minmax = 2.2.0
...@@ -34,11 +34,11 @@ md5sum = cfe4696a67bf4886a5d8252a5274a941 ...@@ -34,11 +34,11 @@ md5sum = cfe4696a67bf4886a5d8252a5274a941
[template-zope-conf] [template-zope-conf]
filename = zope.conf.in filename = zope.conf.in
md5sum = 70f30111e137d158aeca3d67c4abf643 md5sum = c4bb59e56a29c4aaf5b2c2b92520e8f7
[site-zcml] [site-zcml]
filename = site.zcml filename = site.zcml
md5sum = d32417746fcf671d4e86a70379815039 md5sum = 43556e5bca8336dd543ae8068512aa6d
[template-my-cnf] [template-my-cnf]
filename = my.cnf.in filename = my.cnf.in
......
...@@ -21,6 +21,6 @@ ...@@ -21,6 +21,6 @@
<securityPolicy <securityPolicy
component="Products.Five.security.FiveSecurityPolicy" /> component="AccessControl.security.SecurityPolicy" />
</configure> </configure>
[buildout]
# Version pins for required and commonly used dependencies.
[versions] [versions]
Zope2 = 2.13.30 #Zope = 4.5.3
AccessControl = 2.13.16 Zope2 = 4.0
Acquisition = 2.13.12 # AccessControl 5+ no longer supports Zope 4.
DateTime = 2.12.8 AccessControl = 4.2
DocumentTemplate = 2.13.6 Acquisition = 4.7
ExtensionClass = 2.13.2 AuthEncoding = 4.2
Jinja2 = 2.8.1 BTrees = 4.7.2
MarkupSafe = 1.1.1 Chameleon = 3.8.1
Missing = 2.13.1 DateTime = 4.3
MultiMapping = 2.13.0 # DocumentTemplate 4+ no longer supports Zope 4.
Paste = 1.7.5.1 DocumentTemplate = 3.4
PasteDeploy = 1.3.4 ExtensionClass = 4.5.0
PasteScript = 1.7.5 Missing = 4.1
Persistence = 2.13.2 MultiMapping = 4.1
Products.BTreeFolder2 = 2.13.5 Paste = 3.5.0
Products.ExternalMethod = 2.13.1 PasteDeploy = 2.1.1
Products.MIMETools = 2.13.0 Persistence = 3.0
Products.MailHost = 2.13.4 Products.BTreeFolder2 = 4.2
Products.OFSP = 2.13.2 # ZCatalog 6+ no longer supports Zope 4.
Products.PythonScripts = 2.13.2 Products.ZCatalog = 5.2
Products.Sessions = 3.0 Record = 3.5
Products.StandardCacheManagers = 2.13.1 RestrictedPython = 5.1
Products.TemporaryFolder = 3.0 WSGIProxy2 = 0.4.6
Products.ZCTextIndex = 2.13.5 WebOb = 1.8.6
Products.ZCatalog = 2.13.30 WebTest = 2.0.35
Record = 2.13.0 ZConfig = 3.5.0
RestrictedPython = 3.6.0 ZEO = 5.2.2
Sphinx = 1.0.8 ZODB = 5.6.0
ZConfig = 2.9.3 ZServer = 4.0.2
ZODB3 = 3.10.7 five.globalrequest = 99.1
ZServer = 3.0 five.localsitemanager = 3.2.2
ZopeUndo = 2.12.0 funcsigs = 1.0.2
appdirs = 1.4.3 future = 0.18.2
configparser = 4.0.2 ipaddress = 1.0.23
contextlib2 = 0.6.0.post1 # mock 4.0 and up requires Python 3
distlib = 0.3.0 mock = 3.0.5
docutils = 0.12 pbr = 5.5.1
filelock = 3.0.12 persistent = 4.6.4
importlib-metadata = 1.3.0 pytz = 2020.4
importlib-resources = 1.0.2 roman = 3.3
initgroups = 2.13.0 shutilwhich = 1.1.0
mechanize = 0.2.5 six = 1.15.0
more-itertools = 5.0.0 transaction = 3.0.0
mr.developer = 1.34 waitress = 1.4.4
packaging = 20.1 z3c.pt = 3.3.0
pathlib2 = 2.3.5 zExceptions = 4.1
pluggy = 0.13.1 zc.lockfile = 2.0
py = 1.8.1 zdaemon = 4.3
pyparsing = 2.4.6 zodbpickle = 2.0.0
pytz = 2017.2 zope.annotation = 4.7.0
repoze.retry = 1.2 zope.browser = 2.3
repoze.tm2 = 1.0 zope.browsermenu = 4.4
repoze.who = 2.0 zope.browserpage = 4.4.0
scandir = 1.10.0 zope.browserresource = 4.4
six = 1.14.0 zope.cachedescriptors = 4.3.1
tempstorage = 2.12.2 zope.component = 4.6.2
toml = 0.10.0 zope.componentvocabulary = 2.2.0
tox = 3.14.4 zope.configuration = 4.4.0
transaction = 1.1.1 zope.container = 4.4.0
typing = 3.7.4.1 zope.contentprovider = 4.2.1
virtualenv = 20.0.4 zope.contenttype = 4.5.0
z3c.checkversions = 1.1 zope.datetime = 4.2.0
zExceptions = 2.13.0 zope.deferredimport = 4.3.1
zLOG = 2.11.2 zope.deprecation = 4.4.0
zc.buildout = 2.3.1 zope.dottedname = 4.3
zc.lockfile = 1.0.2 zope.event = 4.5.0
zc.recipe.egg = 2.0.5 zope.exceptions = 4.4
zc.recipe.testrunner = 1.2.1 zope.filerepresentation = 5.0.0
zdaemon = 2.0.7 zope.formlib = 4.7.1
zipp = 0.6.0 zope.globalrequest = 1.5
zope.annotation = 3.5.0 zope.hookable = 5.0.1
zope.broken = 3.6.0 zope.i18n = 4.7.0
zope.browser = 1.3 zope.i18nmessageid = 5.0.1
zope.browsermenu = 3.9.1 zope.interface = 5.2.0
zope.browserpage = 3.12.2 zope.lifecycleevent = 4.3.0
zope.browserresource = 3.10.3 zope.location = 4.2
zope.component = 3.9.5 zope.pagetemplate = 4.5.0
zope.configuration = 3.7.4 zope.processlifetime = 2.3.0
zope.container = 3.11.2 zope.proxy = 4.3.5
zope.contentprovider = 3.7.2 zope.ptresource = 4.2.0
zope.contenttype = 3.5.5 zope.publisher = 5.2.1
zope.deferredimport = 3.5.3 zope.ramcache = 2.3
zope.dottedname = 3.4.6 zope.schema = 6.0.0
zope.event = 3.5.2 zope.security = 5.1.1
zope.exceptions = 3.6.2 zope.sendmail = 5.1
zope.filerepresentation = 3.6.1 zope.sequencesort = 4.1.2
zope.i18n = 3.7.4 zope.site = 4.4.0
zope.i18nmessageid = 3.5.3 zope.size = 4.3
zope.interface = 3.6.8 zope.structuredtext = 4.3
zope.lifecycleevent = 3.6.2 zope.tal = 4.4
zope.location = 3.9.1 zope.tales = 5.1
zope.pagetemplate = 3.5.2 zope.testbrowser = 5.5.1
zope.processlifetime = 1.0 # Version 4.8+ dropped support for Python 3.5
zope.proxy = 3.6.1 zope.testing = 4.7
zope.ptresource = 3.9.0 zope.testrunner = 5.2
zope.publisher = 3.12.6 zope.traversing = 4.4.1
zope.schema = 3.7.1 zope.viewlet = 4.2.1
zope.security = 3.7.4
zope.sendmail = 3.7.5
zope.sequencesort = 3.4.0
zope.site = 3.9.2
zope.size = 3.4.1
zope.structuredtext = 3.5.1
zope.tal = 3.5.2
zope.tales = 3.5.3
zope.testbrowser = 3.11.1
zope.testing = 3.9.7
zope.traversing = 3.13.2
zope.viewlet = 3.7.2
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# too late for some components. # too late for some components.
%define INSTANCE {{ parameter_dict['instance'] }} %define INSTANCE {{ parameter_dict['instance'] }}
instancehome $INSTANCE instancehome $INSTANCE
zserver-threads {{ parameter_dict['thread-amount'] }} # zserver-threads {{ parameter_dict['thread-amount'] }}
# When ownership checking is enabled, the roles a script runs as are the # When ownership checking is enabled, the roles a script runs as are the
# intersection between user's roles and script owner's roles. This means # intersection between user's roles and script owner's roles. This means
# that revoking a code author's access to the system prevent all scripts # that revoking a code author's access to the system prevent all scripts
...@@ -15,15 +15,15 @@ zserver-threads {{ parameter_dict['thread-amount'] }} ...@@ -15,15 +15,15 @@ zserver-threads {{ parameter_dict['thread-amount'] }}
# revoked when their account is terminated. # revoked when their account is terminated.
skip-ownership-checking true skip-ownership-checking true
lock-filename {{ parameter_dict['lock-file'] }} # lock-filename {{ parameter_dict['lock-file'] }}
pid-filename {{ parameter_dict['pid-file'] }} pid-filename {{ parameter_dict['pid-file'] }}
default-zpublisher-encoding utf-8 default-zpublisher-encoding utf-8
rest-input-encoding utf-8 # rest-input-encoding utf-8
rest-output-encoding utf-8 # rest-output-encoding utf-8
# XXX: isn't this entry implicit ? # XXX: isn't this entry implicit ?
products {{ parameter_dict['instance-products'] }} # products {{ parameter_dict['instance-products'] }}
# Magic parameter to use the first entry of X-Forwarded-For as the source IP address. # Magic parameter to use the first entry of X-Forwarded-For as the source IP address.
# (see monkey patches in ERP5Type/patches/HTTPRequest.py and ERP5Type/patches/http_server.py) # (see monkey patches in ERP5Type/patches/HTTPRequest.py and ERP5Type/patches/http_server.py)
...@@ -45,9 +45,6 @@ trusted-proxy 0.0.0.0 ...@@ -45,9 +45,6 @@ trusted-proxy 0.0.0.0
{% endif %} {% endif %}
{%- endif %} {%- endif %}
<zoperunner>
program $INSTANCE/bin/runzope
</zoperunner>
<product-config DeadlockDebugger> <product-config DeadlockDebugger>
dump_url {{ parameter_dict['deadlock-path'] }} dump_url {{ parameter_dict['deadlock-path'] }}
...@@ -63,10 +60,6 @@ trusted-proxy 0.0.0.0 ...@@ -63,10 +60,6 @@ trusted-proxy 0.0.0.0
{% endif -%} {% endif -%}
{% if 'large-file-threshold' in parameter_dict -%}
large-file-threshold {{ parameter_dict['large-file-threshold'] }}
{% endif -%}
{% if 'tidstorage-ip' in parameter_dict -%} {% if 'tidstorage-ip' in parameter_dict -%}
<product-config TIDStorage> <product-config TIDStorage>
backend-ip {{ parameter_dict['tidstorage-ip'] }} backend-ip {{ parameter_dict['tidstorage-ip'] }}
...@@ -88,6 +81,7 @@ large-file-threshold {{ parameter_dict['large-file-threshold'] }} ...@@ -88,6 +81,7 @@ large-file-threshold {{ parameter_dict['large-file-threshold'] }}
{% endif %} {% endif %}
{% endif -%} {% endif -%}
{% set sql_connection_string = parameter_dict.get('sql-connection-string') -%} {% set sql_connection_string = parameter_dict.get('sql-connection-string') -%}
{% if sql_connection_string -%} {% if sql_connection_string -%}
{% set bt5_repository_url = [] -%} {% set bt5_repository_url = [] -%}
...@@ -112,22 +106,6 @@ large-file-threshold {{ parameter_dict['large-file-threshold'] }} ...@@ -112,22 +106,6 @@ large-file-threshold {{ parameter_dict['large-file-threshold'] }}
</product-config> </product-config>
{% endif -%} {% endif -%}
<eventlog>
level info
<logfile>
dateformat
path {{ parameter_dict['event-log'] }}
</logfile>
</eventlog>
<logger access>
level WARN
<logfile>
dateformat
format %(message)s
path {{ parameter_dict['z2-log'] }}
</logfile>
</logger>
<zodb_db temporary> <zodb_db temporary>
<temporarystorage> <temporarystorage>
......
[versions] [buildout]
# ZTK extends =
zope.annotation = 3.5.0 zope-versions.cfg
zope.applicationcontrol = 3.5.5 versions = versions
zope.authentication = 3.7.1
zope.broken = 3.6.0
zope.browser = 1.3
zope.browsermenu = 3.9.1
zope.browserpage = 3.12.2
zope.browserresource = 3.10.3
zope.cachedescriptors = 3.5.1
zope.catalog = 3.8.2
zope.component = 3.9.5
zope.componentvocabulary = 1.0.1
zope.configuration = 3.7.4
zope.container = 3.11.2
zope.contentprovider = 3.7.2
zope.contenttype = 3.5.5
zope.copy = 3.5.0
zope.copypastemove = 3.7.0
zope.datetime = 3.4.1
zope.deferredimport = 3.5.3
zope.deprecation = 3.4.1
zope.dottedname = 3.4.6
zope.dublincore = 3.7.1
zope.error = 3.7.4
zope.event = 3.5.2
zope.exceptions = 3.6.2
zope.filerepresentation = 3.6.1
zope.formlib = 4.0.6
zope.hookable = 3.4.1
zope.i18n = 3.7.4
zope.i18nmessageid = 3.5.3
zope.index = 3.6.4
zope.interface = 3.6.7
zope.intid = 3.7.2
zope.keyreference = 3.6.4
zope.lifecycleevent = 3.6.2
zope.location = 3.9.1
zope.login = 1.0.0
zope.mimetype = 1.3.1
zope.minmax = 1.1.2
zope.pagetemplate = 3.5.2
zope.password = 3.6.1
zope.pluggableauth = 1.0.3
zope.principalannotation = 3.6.1
zope.principalregistry = 3.7.1
zope.processlifetime = 1.0
zope.proxy = 3.6.1
zope.ptresource = 3.9.0
zope.publisher = 3.12.6
zope.ramcache = 1.0
zope.schema = 3.7.1
zope.security = 3.7.4
zope.securitypolicy = 3.7.0
zope.sendmail = 3.7.5
zope.sequencesort = 3.4.0
zope.server = 3.6.3
zope.session = 3.9.5
zope.site = 3.9.2
zope.size = 3.4.1
zope.structuredtext = 3.5.1
zope.tal = 3.5.2
zope.tales = 3.5.3
zope.testing = 3.9.7
zope.traversing = 3.13.2
zope.viewlet = 3.7.2
# Deprecating
zope.documenttemplate = 3.4.3
# Dependencies [versions]
# Needed for the mechanize 0.1.x. # Version pins for development and optional dependencies.
ClientForm = 0.2.10 Babel = 2.8.1
distribute = 0.6.49 Jinja2 = 2.11.2
docutils = 0.7 MarkupSafe = 1.1.1
Jinja2 = 2.5.5 # Pygments 2.6.0 and up require Python 3
# Newer versions of mechanize are not fully py24 compatible. Pygments = 2.5.2
mechanize = 0.1.11 # Version 2.0+ needs Python 3.x
Paste = 1.7.5.1 Sphinx = 1.8.5
PasteDeploy = 1.3.4 alabaster = 0.7.12
PasteScript = 1.7.5 appdirs = 1.4.4
py = 1.3.4 attrs = 20.3.0
Pygments = 1.3.1 backports.functools-lru-cache = 1.6.1
python-gettext = 1.0 beautifulsoup4 = 4.9.3
pytz = 2013b bleach = 3.2.1
RestrictedPython = 3.6.0 buildout.wheel = 0.2.0
setuptools = 12.2 # Version 2020.4.5.2 and up claim no Python 2 support
Sphinx = 1.0.8 certifi = 2020.4.5.1
transaction = 1.1.1 cffi = 1.14.3
unittest2 = 0.5.1 chardet = 3.0.4
z3c.recipe.sphinxdoc = 0.0.8 cmarkgfm = 0.4.2
zc.buildout = 2.3.1 collective.recipe.cmd = 0.11
zc.lockfile = 1.0.2 collective.recipe.sphinxbuilder = 1.1
ZConfig = 2.8.0 collective.recipe.template = 2.1
zc.recipe.egg = 1.3.2 colorama = 0.4.4
zc.recipe.testrunner = 1.2.1 # configparser 5 and up require Python 3
zc.resourcelibrary = 1.3.4 configparser = 4.0.2
zdaemon = 2.0.7 contextlib2 = 0.6.0.post1
ZODB3 = 3.9.7 coverage = 5.3
zope.mkzeoinstance = 3.9.6 distlib = 0.3.1
docutils = 0.16
# toolchain filelock = 3.0.12
argparse = 1.1 idna = 2.10
coverage = 3.5.3 imagesize = 1.2.0
lxml = 2.2.8 # tox and pluggy require importlib-metadata <1
mr.developer = 1.25 importlib-metadata = 0.23
tl.eggdeps = 0.4 lxml = 4.6.1
nose = 1.1.2 manuel = 1.10.1
z3c.checkversions = 0.4.2 # Version 6+ needs Python 3.x
z3c.recipe.compattest = 0.12.2 more-itertools = 5.0.0
z3c.recipe.depgraph = 0.5 mr.developer = 2.0.1
zope.kgs = 1.2.0 nose = 1.3.7
packaging = 20.4
pathlib2 = 2.3.5
pip = 20.2.4
pkginfo = 1.6.1
plone.recipe.command = 1.1
pluggy = 0.13.1
py = 1.9.0
pycparser = 2.20
pyparsing = 2.4.7
python-gettext = 4.0
readme-renderer = 28.0
repoze.sphinx.autointerface = 0.8
requests = 2.25.0
requests-toolbelt = 0.9.1
scandir = 1.10.0
snowballstemmer = 2.0.0
# soupsieve 2 needs Python 3
soupsieve = 1.9.6
sphinx-rtd-theme = 0.5.0
sphinxcontrib-serializinghtml = 1.1.4
sphinxcontrib-websupport = 1.2.4
# tempstorage is only needed because the Sphinx documentation parses
# ZConfig xml configurations, which still contain references to it
tempstorage = 5.1
toml = 0.10.2
tox = 3.20.1
tqdm = 4.51.0
# Version 2+ needs Python 3.x
twine = 1.15.0
typing = 3.7.4.3
urllib3 = 1.26.1
virtualenv = 20.1.0
webencodings = 0.5.1
wheel = 0.35.1
z3c.checkversions = 1.2
zc.recipe.egg = 2.0.7
zc.recipe.testrunner = 2.1
zest.releaser = 6.22.1
# Version 2 requires Python 3
zipp = 1.1.1
zodbupdate = 1.5
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment