Skip to content

Commit

Permalink
Guarantee a session factory to be set.
Browse files Browse the repository at this point in the history
Issue #891
  • Loading branch information
Wim-De-Clercq committed Jul 18, 2024
1 parent 23d1604 commit c764a0d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 23 deletions.
80 changes: 58 additions & 22 deletions atramhasis/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import logging
import os

from pyramid.config import Configurator
from pyramid.config import PHASE3_CONFIG
from pyramid.interfaces import ISessionFactory
from pyramid.session import SignedCookieSessionFactory
from pyramid.settings import aslist

from atramhasis.renderers import json_renderer_verbose

LOG = logging.getLogger(__name__)


DEFAULT_SETTINGS = {
"cache.tree.backend": "dogpile.cache.memory",
Expand All @@ -29,45 +35,75 @@ def includeme(config):
if key not in settings:
settings[key] = value

config.include('pyramid_jinja2')
config.include('pyramid_tm')
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_renderer('csv', 'atramhasis.renderers.CSVRenderer')
config.add_renderer('skosrenderer_verbose', json_renderer_verbose)
configure_session(config)
config.include("pyramid_jinja2")
config.include("pyramid_tm")
config.add_static_view("static", "static", cache_max_age=3600)
config.add_renderer("csv", "atramhasis.renderers.CSVRenderer")
config.add_renderer("skosrenderer_verbose", json_renderer_verbose)
# Rewrite urls with trailing slash
config.include('pyramid_rewrite')
config.include("pyramid_rewrite")
config.include("pyramid_openapi3")
config.include('atramhasis.routes')
config.include('pyramid_skosprovider')
config.include('atramhasis.cache')
config.scan('pyramid_skosprovider')
config.include("atramhasis.routes")
config.include("pyramid_skosprovider")
config.include("atramhasis.cache")
config.scan("pyramid_skosprovider")

config.add_translation_dirs('atramhasis:locale/')
config.add_translation_dirs("atramhasis:locale/")

config.scan()


def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
def configure_session(config):
"""
Configure pyramid's session factory.
People can configure their own session factory, but if no factory is registered
atramhasis will try configuring its own.
"""
settings['layout.focus_conceptschemes'] = aslist(settings['layout.focus_conceptschemes'], flatten=False)

dump_location = settings['atramhasis.dump_location']
def check_session_factory_set():
session_factory = config.registry.queryUtility(ISessionFactory)
if session_factory:
return

settings = config.registry.settings
if "atramhasis.session_factory.secret" not in settings:
msg = (
"No session factory is configured, and "
"atramhasis.session_factory.secret setting is missing."
)
raise ValueError(msg)

LOG.info("Using default SignedCookieSessionFactory.")
default_session_factory = SignedCookieSessionFactory(
settings["atramhasis.session_factory.secret"]
)
config.registry.registerUtility(default_session_factory, ISessionFactory)

config.action(
"check_session_factory_set", check_session_factory_set, order=PHASE3_CONFIG + 1
)


def main(global_config, **settings):
"""This function returns a Pyramid WSGI application."""
settings["layout.focus_conceptschemes"] = aslist(
settings["layout.focus_conceptschemes"], flatten=False
)

dump_location = settings["atramhasis.dump_location"]
if not os.path.exists(dump_location):
os.makedirs(dump_location)

config = Configurator(settings=settings)

return load_app(config, settings)

return load_app(config)

def load_app(config, settings):
from pyramid.session import SignedCookieSessionFactory
atramhasis_session_factory = SignedCookieSessionFactory(settings['atramhasis.session_factory.secret'])
config.set_session_factory(atramhasis_session_factory)

def load_app(config):
includeme(config)

config.include('atramhasis.data:db')
config.include("atramhasis.data:db")

return config.make_wsgi_app()
2 changes: 1 addition & 1 deletion tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ def __init__(self):
def setUp(self):
pyramid_settings = Settings(settings)
config = testing.setUp(settings=pyramid_settings)
atramhasis.load_app(config, pyramid_settings)
atramhasis.load_app(config)
self.request = DummyRequest()
self.request.application_url = "http://localhost:6543"
apply_request_extensions(self.request)
Expand Down

0 comments on commit c764a0d

Please sign in to comment.