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

2
ordr3/__init__.py

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

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

@ -1,7 +1,8 @@ @@ -1,7 +1,8 @@
""" Base Resource and Mixin classes, not to be used directly """
""" base resource and resource root factory """
import abc
from pyramid.security import Allow, Everyone
from sqlalchemy.inspection import inspect
@ -27,13 +28,8 @@ class BaseResource(abc.ABC): @@ -27,13 +28,8 @@ class BaseResource(abc.ABC):
def __getitem__(self, key):
""" returns child resources """
child_node_class = self.nodes.get(key, None)
if child_node_class:
child_node_class = self.nodes[key]
return child_node_class(key, self)
try:
return super().__getitem__(key)
except AttributeError:
raise KeyError()
@classmethod
def from_sqla(cls, sql_model_instance, parent):
@ -45,3 +41,29 @@ class BaseResource(abc.ABC): @@ -45,3 +41,29 @@ class BaseResource(abc.ABC):
raise ValueError("Cannot init resource for composite primary key")
primary_key = str(primary_keys[0])
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 @@ @@ -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 @@ @@ -1,8 +1,10 @@
def includeme(config):
"""
Initialize routes in a Pyramid app.
""" Initialize routes in a Pyramid app.
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 @@ @@ -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 = [ @@ -55,6 +55,9 @@ dev = [
"pre-commit",
]
[tool.flit.entrypoints."paste.app_factory"]
main = "ordr3:main"
[tool.black]
line-length = 79
py37 = true

Loading…
Cancel
Save