Browse Source

added views and entry point

funding-tag
Holger Frey 5 years ago
parent
commit
1638d761c3
  1. 4
      development.ini
  2. 2
      ordr3/__init__.py
  3. 36
      ordr3/resources.py
  4. 31
      ordr3/resources/__init__.py
  5. 8
      ordr3/routes.py
  6. 25
      ordr3/views/__init__.py
  7. 3
      pyproject.toml

4
development.ini

@ -18,9 +18,13 @@ sqlalchemy.url = sqlite:///%(here)s/ordr3.sqlite
retry.attempts = 3 retry.attempts = 3
auth.secret = "change me for production"
session.secret = "change me for production" session.secret = "change me for production"
session.auto_csrf = true session.auto_csrf = true
# By default, the toolbar only appears for clients from IP addresses # By default, the toolbar only appears for clients from IP addresses
# '127.0.0.1' and '::1'. # '127.0.0.1' and '::1'.
# debugtoolbar.hosts = 127.0.0.1 ::1 # debugtoolbar.hosts = 127.0.0.1 ::1

2
ordr3/__init__.py

@ -29,7 +29,7 @@ def main(global_config, **settings):
config.include(".resources") config.include(".resources")
config.include(".routes") config.include(".routes")
config.include(".security") config.include(".security")
# config.include('.views') config.include(".views")
config.include("pyramid_jinja2") config.include("pyramid_jinja2")

36
ordr3/resources/base.py → ordr3/resources.py

@ -1,7 +1,8 @@
""" Base Resource and Mixin classes, not to be used directly """ """ base resource and resource root factory """
import abc import abc
from pyramid.security import Allow, Everyone
from sqlalchemy.inspection import inspect from sqlalchemy.inspection import inspect
@ -27,13 +28,8 @@ class BaseResource(abc.ABC):
def __getitem__(self, key): def __getitem__(self, key):
""" returns child resources """ """ returns child resources """
child_node_class = self.nodes.get(key, None) child_node_class = self.nodes[key]
if child_node_class:
return child_node_class(key, self) return child_node_class(key, self)
try:
return super().__getitem__(key)
except AttributeError:
raise KeyError()
@classmethod @classmethod
def from_sqla(cls, sql_model_instance, parent): def from_sqla(cls, sql_model_instance, parent):
@ -45,3 +41,29 @@ class BaseResource(abc.ABC):
raise ValueError("Cannot init resource for composite primary key") raise ValueError("Cannot init resource for composite primary key")
primary_key = str(primary_keys[0]) primary_key = str(primary_keys[0])
return cls(primary_key, parent, sql_model_instance) return cls(primary_key, parent, sql_model_instance)
class Root(BaseResource):
""" Root resource """
__name__ = None
__parent__ = None
nodes = {}
def __init__(self, request):
self.request = request
def __acl__(self):
""" access controll list """
return [(Allow, Everyone, "view")]
def includeme(config):
"""
Initialize the resources for traversal in a Pyramid app.
Activate this setup using ``config.include('ordr3.resources')``.
"""
config.set_root_factory(Root)

31
ordr3/resources/__init__.py

@ -1,31 +0,0 @@
""" base resource and resource root factory """
from pyramid.security import Allow, Everyone
from .base import BaseResource
class Root(BaseResource):
""" Root resource """
__name__ = None
__parent__ = None
nodes = {}
def __init__(self, request):
self.request = request
def __acl__(self):
""" access controll list """
return [(Allow, Everyone, "view")]
def includeme(config):
"""
Initialize the resources for traversal in a Pyramid app.
Activate this setup using ``config.include('ordr3.resources')``.
"""
config.set_root_factory(Root)

8
ordr3/routes.py

@ -1,8 +1,10 @@
def includeme(config): def includeme(config):
""" """ Initialize routes in a Pyramid app.
Initialize routes in a Pyramid app.
Activate this setup using ``config.include('ordr3.routes')``. Activate this setup using ``config.include('ordr3.routes')``.
""" """
config.add_static_view("static", "static", cache_max_age=3600) settings = config.get_settings()
age = int(settings.get("static_views.cache_max_age", 3600))
config.add_static_view("static", "static", cache_max_age=age)
# config.add_static_view('deform', 'deform:static', cache_max_age=age)

25
ordr3/views/__init__.py

@ -0,0 +1,25 @@
""" views package
some view helpers are defined here
"""
from collections import namedtuple
# a message for session.flash()
FlashMessage = namedtuple("FlashMessage", ["message", "description"])
def flash(request, channel, message, description=""):
""" small wrapper around request.session.flash """
msg = FlashMessage(message, description)
request.session.flash(msg, channel, allow_duplicate=False)
def includeme(config):
""" adding request helpers
Activate this setup using ``config.include('ordr3.views')``.
"""
# this allows to use the request object like this:
# request.flash(channel, message, description)
config.add_request_method(flash, "flash")

3
pyproject.toml

@ -55,6 +55,9 @@ dev = [
"pre-commit", "pre-commit",
] ]
[tool.flit.entrypoints."paste.app_factory"]
main = "ordr3:main"
[tool.black] [tool.black]
line-length = 79 line-length = 79
py37 = true py37 = true

Loading…
Cancel
Save