cubicweb/pyramid/config.py
changeset 12053 c3c9f2e1424c
child 12245 cd760c411242
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/pyramid/config.py	Thu Mar 09 16:36:33 2017 +0100
@@ -0,0 +1,64 @@
+# copyright 2017 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of CubicWeb.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
+"""Configuration for CubicWeb instances on top of a Pyramid application"""
+
+from os import path
+import random
+import string
+
+from logilab.common.configuration import merge_options
+
+from cubicweb.cwconfig import CONFIGURATIONS
+from cubicweb.server.serverconfig import ServerConfiguration
+from cubicweb.toolsutils import fill_templated_file
+from cubicweb.web.webconfig import BaseWebConfiguration
+
+
+def get_random_secret_key():
+    """Return 50-character secret string"""
+    chars = string.ascii_letters + string.digits
+    return "".join([random.choice(chars) for i in range(50)])
+
+
+class CubicWebPyramidConfiguration(BaseWebConfiguration, ServerConfiguration):
+    """Pyramid application with a CubicWeb repository"""
+    name = 'pyramid'
+
+    cubicweb_appobject_path = (BaseWebConfiguration.cubicweb_appobject_path
+                               | ServerConfiguration.cubicweb_appobject_path)
+    cube_appobject_path = (BaseWebConfiguration.cube_appobject_path
+                           | ServerConfiguration.cube_appobject_path)
+
+    options = merge_options(ServerConfiguration.options +
+                            BaseWebConfiguration.options)
+
+    def write_development_ini(self, cubes):
+        """Write a 'development.ini' file into apphome."""
+        template_fpath = path.join(path.dirname(__file__), 'development.ini.tmpl')
+        target_fpath = path.join(self.apphome, 'development.ini')
+        context = {
+            'instance': self.appid,
+            'cubename': cubes[0],
+            'session-secret': get_random_secret_key(),
+            'auth-authtkt-persistent-secret': get_random_secret_key(),
+            'auth-authtkt-session-secret': get_random_secret_key(),
+        }
+        fill_templated_file(template_fpath, target_fpath, context)
+
+
+CONFIGURATIONS.append(CubicWebPyramidConfiguration)