Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/alchemy scaffold update - wiki2/tests #2155

Merged
merged 2 commits into from
Dec 2, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/tutorials/wiki2/src/tests/development.ini
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ sqlalchemy.url = sqlite:///%(here)s/tutorial.sqlite

[server:main]
use = egg:waitress#main
host = 0.0.0.0
host = 127.0.0.1
port = 6543

###
Expand Down Expand Up @@ -68,4 +68,4 @@ level = NOTSET
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
14 changes: 10 additions & 4 deletions docs/tutorials/wiki2/src/tests/production.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
###
# app configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
###

[app:main]
use = egg:tutorial

Expand All @@ -16,7 +21,10 @@ use = egg:waitress#main
host = 0.0.0.0
port = 6543

# Begin logging configuration
###
# logging configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
###

[loggers]
keys = root, tutorial, sqlalchemy
Expand Down Expand Up @@ -51,6 +59,4 @@ level = NOTSET
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

# End logging configuration
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
4 changes: 2 additions & 2 deletions docs/tutorials/wiki2/src/tests/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@

requires = [
'pyramid',
'pyramid_chameleon',
'pyramid_jinja2',
'pyramid_debugtoolbar',
'pyramid_tm',
'SQLAlchemy',
'transaction',
'zope.sqlalchemy',
'waitress',
'docutils',
'WebTest', # add this
'WebTest',
]

setup(name='tutorial',
Expand Down
18 changes: 4 additions & 14 deletions docs/tutorials/wiki2/src/tests/tutorial/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,20 @@
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy

from sqlalchemy import engine_from_config

from tutorial.security import groupfinder

from .models import (
DBSession,
Base,
)

from security.default import groupfinder

def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.bind = engine
authn_policy = AuthTktAuthenticationPolicy(
'sosecret', callback=groupfinder, hashalg='sha512')
authz_policy = ACLAuthorizationPolicy()
config = Configurator(settings=settings,
root_factory='tutorial.models.RootFactory')
config.include('pyramid_chameleon')
root_factory='tutorial.models.mymodel.RootFactory')
config.set_authentication_policy(authn_policy)
config.set_authorization_policy(authz_policy)
config.include('pyramid_jinja2')
config.include('.models.meta')
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('view_wiki', '/')
config.add_route('login', '/login')
Expand Down
7 changes: 7 additions & 0 deletions docs/tutorials/wiki2/src/tests/tutorial/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from sqlalchemy.orm import configure_mappers
# import all models classes here for sqlalchemy mappers
# to pick up
from .mymodel import Page # flake8: noqa

# run configure mappers to ensure we avoid any race conditions
configure_mappers()
46 changes: 46 additions & 0 deletions docs/tutorials/wiki2/src/tests/tutorial/models/meta.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from sqlalchemy import engine_from_config
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.schema import MetaData
import zope.sqlalchemy

NAMING_CONVENTION = {
"ix": 'ix_%(column_0_label)s',
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s"
}

metadata = MetaData(naming_convention=NAMING_CONVENTION)
Base = declarative_base(metadata=metadata)


def includeme(config):
settings = config.get_settings()
dbmaker = get_dbmaker(get_engine(settings))

config.add_request_method(
lambda r: get_session(r.tm, dbmaker),
'dbsession',
reify=True
)

config.include('pyramid_tm')


def get_session(transaction_manager, dbmaker):
dbsession = dbmaker()
zope.sqlalchemy.register(dbsession,
transaction_manager=transaction_manager)
return dbsession


def get_engine(settings, prefix='sqlalchemy.'):
return engine_from_config(settings, prefix)


def get_dbmaker(engine):
dbmaker = sessionmaker()
dbmaker.configure(bind=engine)
return dbmaker
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from .meta import Base

from pyramid.security import (
Allow,
Everyone,
Expand All @@ -9,29 +11,16 @@
Text,
)

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)

from zope.sqlalchemy import ZopeTransactionExtension

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()


class Page(Base):
""" The SQLAlchemy declarative model class for a Page object. """
__tablename__ = 'pages'
id = Column(Integer, primary_key=True)
name = Column(Text, unique=True)
data = Column(Text)

data = Column(Integer)

class RootFactory(object):
__acl__ = [ (Allow, Everyone, 'view'),
(Allow, 'group:editors', 'edit') ]
def __init__(self, request):
pass
pass
25 changes: 15 additions & 10 deletions docs/tutorials/wiki2/src/tests/tutorial/scripts/initializedb.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,41 @@
import sys
import transaction

from sqlalchemy import engine_from_config

from pyramid.paster import (
get_appsettings,
setup_logging,
)

from ..models import (
DBSession,
Page,
from ..models.meta import (
Base,
get_session,
get_engine,
get_dbmaker,
)
from ..models.mymodel import Page


def usage(argv):
cmd = os.path.basename(argv[0])
print('usage: %s <config_uri>\n'
print('usage: %s <config_uri> [var=value]\n'
'(example: "%s development.ini")' % (cmd, cmd))
sys.exit(1)


def main(argv=sys.argv):
if len(argv) != 2:
if len(argv) < 2:
usage(argv)
config_uri = argv[1]
setup_logging(config_uri)
settings = get_appsettings(config_uri)
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)

engine = get_engine(settings)
dbmaker = get_dbmaker(engine)

dbsession = get_session(transaction.manager, dbmaker)

Base.metadata.create_all(engine)

with transaction.manager:
model = Page(name='FrontPage', data='This is the front page')
DBSession.add(model)
dbsession.add(model)
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# package

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,53 +1,52 @@
<!DOCTYPE html>
<html lang="${request.locale_name}">
<html lang="{{request.locale_name}}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="pyramid web application">
<meta name="author" content="Pylons Project">
<link rel="shortcut icon" href="${request.static_url('tutorial:static/pyramid-16x16.png')}">
<link rel="shortcut icon" href="{{request.static_url('tutorial:static/pyramid-16x16.png')}}">

<title>${page.name} - Pyramid tutorial wiki (based on
TurboGears 20-Minute Wiki)</title>
<title>Edit{% if page.name %} {{page.name}}{% endif %} - Pyramid tutorial wiki (based on TurboGears 20-Minute Wiki)</title>

<!-- Bootstrap core CSS -->
<link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this scaffold -->
<link href="${request.static_url('tutorial:static/theme.css')}" rel="stylesheet">
<link href="{{request.static_url('tutorial:static/theme.css')}}" rel="stylesheet">

<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>

<body>

<div class="starter-template">
<div class="container">
<div class="row">
<div class="col-md-2">
<img class="logo img-responsive" src="${request.static_url('tutorial:static/pyramid.png')}" alt="pyramid web framework">
<img class="logo img-responsive" src="{{request.static_url('tutorial:static/pyramid.png')}}" alt="pyramid web framework">
</div>
<div class="col-md-10">
<div class="content">
{% if logged_in %}
<p class="pull-right">
<a href="{{ request.application_url }}/logout">Logout</a>
</p>
{% endif %}
<p>
Editing <strong><span tal:replace="page.name">Page Name Goes
Here</span></strong>
Editing <strong>{% if page.name %}{{page.name}}{% else %}Page Name Goes Here{% endif %}</strong>
</p>
<p>You can return to the
<a href="${request.application_url}">FrontPage</a>.
</p>
<p class="pull-right">
<span tal:condition="logged_in">
<a href="${request.application_url}/logout">Logout</a>
</span>
<a href="{{request.application_url}}">FrontPage</a>.
</p>
<form action="${save_url}" method="post">
<form action="{{ save_url }}" method="post">
<div class="form-group">
<textarea class="form-control" name="body" tal:content="page.data" rows="10" cols="60"></textarea>
<textarea class="form-control" name="body" rows="10" cols="60">{{ page.data }}</textarea>
</div>
<div class="form-group">
<button type="submit" name="form.submitted" value="Save" class="btn btn-default">Save</button>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
<!DOCTYPE html>
<html lang="${request.locale_name}">
<html lang="{{request.locale_name}}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="pyramid web application">
<meta name="author" content="Pylons Project">
<link rel="shortcut icon" href="${request.static_url('tutorial:static/pyramid-16x16.png')}">
<link rel="shortcut icon" href="{{request.static_url('tutorial:static/pyramid-16x16.png')}}">

<title>Alchemy Scaffold for The Pyramid Web Framework</title>

<!-- Bootstrap core CSS -->
<link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this scaffold -->
<link href="${request.static_url('tutorial:static/theme.css')}" rel="stylesheet">
<link href="{{request.static_url('tutorial:static/theme.css')}}" rel="stylesheet">

<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
Expand All @@ -29,19 +29,19 @@
<div class="container">
<div class="row">
<div class="col-md-2">
<img class="logo img-responsive" src="${request.static_url('tutorial:static/pyramid.png')}" alt="pyramid web framework">
<img class="logo img-responsive" src="{{request.static_url('tutorial:static/pyramid.png')}}" alt="pyramid web framework">
</div>
<div class="col-md-10">
<div class="content">
<h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Alchemy scaffold</span></h1>
<p class="lead">Welcome to <span class="font-normal">${project}</span>, an&nbsp;application generated&nbsp;by<br>the <span class="font-normal">Pyramid Web Framework</span>.</p>
</div>
{% block content %}
<p>No content</p>
{% endblock content %}
</div>
</div>
<div class="row">
<div class="links">
<ul>
<li><i class="glyphicon glyphicon-bookmark icon-muted"></i><a href="http://docs.pylonsproject.org/projects/pyramid/en/latest/">Docs</a></li>
<li class="current-version">Generated by v1.7.dev0</li>
<li><i class="glyphicon glyphicon-bookmark icon-muted"></i><a href="http://docs.pylonsproject.org/projects/pyramid/en/1.7-branch/">Docs</a></li>
<li><i class="glyphicon glyphicon-cog icon-muted"></i><a href="https://github.com/Pylons/pyramid">Github Project</a></li>
<li><i class="glyphicon glyphicon-globe icon-muted"></i><a href="irc://irc.freenode.net#pyramid">IRC Channel</a></li>
<li><i class="glyphicon glyphicon-home icon-muted"></i><a href="http://pylonsproject.org">Pylons Project</a></li>
Expand Down
Loading