From e26700528995b1807c5e55a4295a6f788a5603de Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 25 Oct 2010 17:58:11 -0400 Subject: adjust wiki2 tutorial for pyramid --- docs/tutorials/wiki2/src/authorization/CHANGES.txt | 4 + docs/tutorials/wiki2/src/authorization/README.txt | 4 + docs/tutorials/wiki2/src/authorization/setup.cfg | 27 ++ docs/tutorials/wiki2/src/authorization/setup.py | 46 +++ .../tutorials/wiki2/src/authorization/tutorial.ini | 23 ++ .../wiki2/src/authorization/tutorial/__init__.py | 2 + .../src/authorization/tutorial/configure.zcml | 65 ++++ .../wiki2/src/authorization/tutorial/login.py | 39 +++ .../wiki2/src/authorization/tutorial/models.py | 52 +++ .../wiki2/src/authorization/tutorial/run.py | 25 ++ .../wiki2/src/authorization/tutorial/security.py | 8 + .../src/authorization/tutorial/templates/edit.pt | 35 ++ .../src/authorization/tutorial/templates/login.pt | 32 ++ .../authorization/tutorial/templates/mytemplate.pt | 99 ++++++ .../tutorial/templates/static/default.css | 380 +++++++++++++++++++++ .../tutorial/templates/static/images/img01.gif | Bin 0 -> 3840 bytes .../tutorial/templates/static/images/img02.gif | Bin 0 -> 4689 bytes .../tutorial/templates/static/images/img03.gif | Bin 0 -> 229 bytes .../tutorial/templates/static/images/img04.gif | Bin 0 -> 92 bytes .../tutorial/templates/static/images/spacer.gif | Bin 0 -> 43 bytes .../tutorial/templates/static/style.css | 109 ++++++ .../tutorial/templates/static/templatelicense.txt | 243 +++++++++++++ .../src/authorization/tutorial/templates/view.pt | 31 ++ .../wiki2/src/authorization/tutorial/tests.py | 139 ++++++++ .../wiki2/src/authorization/tutorial/views.py | 71 ++++ docs/tutorials/wiki2/src/basiclayout/CHANGES.txt | 4 + docs/tutorials/wiki2/src/basiclayout/README.txt | 4 + docs/tutorials/wiki2/src/basiclayout/setup.cfg | 27 ++ docs/tutorials/wiki2/src/basiclayout/setup.py | 45 +++ docs/tutorials/wiki2/src/basiclayout/tutorial.ini | 22 ++ .../wiki2/src/basiclayout/tutorial/__init__.py | 2 + .../wiki2/src/basiclayout/tutorial/configure.zcml | 18 + .../wiki2/src/basiclayout/tutorial/models.py | 45 +++ .../wiki2/src/basiclayout/tutorial/run.py | 24 ++ .../basiclayout/tutorial/templates/mytemplate.pt | 99 ++++++ .../tutorial/templates/static/default.css | 380 +++++++++++++++++++++ .../tutorial/templates/static/images/img01.gif | Bin 0 -> 3840 bytes .../tutorial/templates/static/images/img02.gif | Bin 0 -> 4689 bytes .../tutorial/templates/static/images/img03.gif | Bin 0 -> 229 bytes .../tutorial/templates/static/images/img04.gif | Bin 0 -> 92 bytes .../tutorial/templates/static/images/spacer.gif | Bin 0 -> 43 bytes .../tutorial/templates/static/templatelicense.txt | 243 +++++++++++++ .../wiki2/src/basiclayout/tutorial/tests.py | 24 ++ .../wiki2/src/basiclayout/tutorial/views.py | 7 + docs/tutorials/wiki2/src/models/CHANGES.txt | 4 + docs/tutorials/wiki2/src/models/README.txt | 4 + docs/tutorials/wiki2/src/models/setup.cfg | 27 ++ docs/tutorials/wiki2/src/models/setup.py | 45 +++ docs/tutorials/wiki2/src/models/tutorial.ini | 22 ++ .../wiki2/src/models/tutorial/__init__.py | 2 + .../wiki2/src/models/tutorial/configure.zcml | 18 + docs/tutorials/wiki2/src/models/tutorial/models.py | 43 +++ docs/tutorials/wiki2/src/models/tutorial/run.py | 24 ++ .../src/models/tutorial/templates/mytemplate.pt | 99 ++++++ .../models/tutorial/templates/static/default.css | 380 +++++++++++++++++++++ .../tutorial/templates/static/images/img01.gif | Bin 0 -> 3840 bytes .../tutorial/templates/static/images/img02.gif | Bin 0 -> 4689 bytes .../tutorial/templates/static/images/img03.gif | Bin 0 -> 229 bytes .../tutorial/templates/static/images/img04.gif | Bin 0 -> 92 bytes .../tutorial/templates/static/images/spacer.gif | Bin 0 -> 43 bytes .../tutorial/templates/static/templatelicense.txt | 243 +++++++++++++ docs/tutorials/wiki2/src/models/tutorial/tests.py | 24 ++ docs/tutorials/wiki2/src/models/tutorial/views.py | 7 + docs/tutorials/wiki2/src/views/CHANGES.txt | 4 + docs/tutorials/wiki2/src/views/README.txt | 4 + docs/tutorials/wiki2/src/views/setup.cfg | 27 ++ docs/tutorials/wiki2/src/views/setup.py | 46 +++ docs/tutorials/wiki2/src/views/tutorial.ini | 23 ++ .../tutorials/wiki2/src/views/tutorial/__init__.py | 2 + .../wiki2/src/views/tutorial/configure.zcml | 38 +++ docs/tutorials/wiki2/src/views/tutorial/models.py | 43 +++ docs/tutorials/wiki2/src/views/tutorial/run.py | 24 ++ .../wiki2/src/views/tutorial/templates/edit.pt | 32 ++ .../src/views/tutorial/templates/mytemplate.pt | 99 ++++++ .../views/tutorial/templates/static/default.css | 380 +++++++++++++++++++++ .../tutorial/templates/static/images/img01.gif | Bin 0 -> 3840 bytes .../tutorial/templates/static/images/img02.gif | Bin 0 -> 4689 bytes .../tutorial/templates/static/images/img03.gif | Bin 0 -> 229 bytes .../tutorial/templates/static/images/img04.gif | Bin 0 -> 92 bytes .../tutorial/templates/static/images/spacer.gif | Bin 0 -> 43 bytes .../src/views/tutorial/templates/static/style.css | 109 ++++++ .../tutorial/templates/static/templatelicense.txt | 243 +++++++++++++ .../wiki2/src/views/tutorial/templates/view.pt | 28 ++ docs/tutorials/wiki2/src/views/tutorial/tests.py | 140 ++++++++ docs/tutorials/wiki2/src/views/tutorial/views.py | 65 ++++ 85 files changed, 4627 insertions(+) create mode 100644 docs/tutorials/wiki2/src/authorization/CHANGES.txt create mode 100644 docs/tutorials/wiki2/src/authorization/README.txt create mode 100644 docs/tutorials/wiki2/src/authorization/setup.cfg create mode 100644 docs/tutorials/wiki2/src/authorization/setup.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial.ini create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/__init__.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/configure.zcml create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/login.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/models.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/run.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/security.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/edit.pt create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/login.pt create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/mytemplate.pt create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/default.css create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/images/img01.gif create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/images/img02.gif create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/images/img03.gif create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/images/img04.gif create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/images/spacer.gif create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/style.css create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/static/templatelicense.txt create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/templates/view.pt create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/tests.py create mode 100644 docs/tutorials/wiki2/src/authorization/tutorial/views.py create mode 100644 docs/tutorials/wiki2/src/basiclayout/CHANGES.txt create mode 100644 docs/tutorials/wiki2/src/basiclayout/README.txt create mode 100644 docs/tutorials/wiki2/src/basiclayout/setup.cfg create mode 100644 docs/tutorials/wiki2/src/basiclayout/setup.py create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial.ini create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/__init__.py create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/configure.zcml create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/models.py create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/run.py create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/mytemplate.pt create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/default.css create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/images/img01.gif create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/images/img02.gif create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/images/img03.gif create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/images/img04.gif create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/images/spacer.gif create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/templates/static/templatelicense.txt create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/tests.py create mode 100644 docs/tutorials/wiki2/src/basiclayout/tutorial/views.py create mode 100644 docs/tutorials/wiki2/src/models/CHANGES.txt create mode 100644 docs/tutorials/wiki2/src/models/README.txt create mode 100644 docs/tutorials/wiki2/src/models/setup.cfg create mode 100644 docs/tutorials/wiki2/src/models/setup.py create mode 100644 docs/tutorials/wiki2/src/models/tutorial.ini create mode 100644 docs/tutorials/wiki2/src/models/tutorial/__init__.py create mode 100644 docs/tutorials/wiki2/src/models/tutorial/configure.zcml create mode 100644 docs/tutorials/wiki2/src/models/tutorial/models.py create mode 100644 docs/tutorials/wiki2/src/models/tutorial/run.py create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/mytemplate.pt create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/default.css create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/images/img01.gif create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/images/img02.gif create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/images/img03.gif create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/images/img04.gif create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/images/spacer.gif create mode 100644 docs/tutorials/wiki2/src/models/tutorial/templates/static/templatelicense.txt create mode 100644 docs/tutorials/wiki2/src/models/tutorial/tests.py create mode 100644 docs/tutorials/wiki2/src/models/tutorial/views.py create mode 100644 docs/tutorials/wiki2/src/views/CHANGES.txt create mode 100644 docs/tutorials/wiki2/src/views/README.txt create mode 100644 docs/tutorials/wiki2/src/views/setup.cfg create mode 100644 docs/tutorials/wiki2/src/views/setup.py create mode 100644 docs/tutorials/wiki2/src/views/tutorial.ini create mode 100644 docs/tutorials/wiki2/src/views/tutorial/__init__.py create mode 100644 docs/tutorials/wiki2/src/views/tutorial/configure.zcml create mode 100644 docs/tutorials/wiki2/src/views/tutorial/models.py create mode 100644 docs/tutorials/wiki2/src/views/tutorial/run.py create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/edit.pt create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/mytemplate.pt create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/default.css create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/images/img01.gif create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/images/img02.gif create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/images/img03.gif create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/images/img04.gif create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/images/spacer.gif create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/style.css create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/static/templatelicense.txt create mode 100644 docs/tutorials/wiki2/src/views/tutorial/templates/view.pt create mode 100644 docs/tutorials/wiki2/src/views/tutorial/tests.py create mode 100644 docs/tutorials/wiki2/src/views/tutorial/views.py (limited to 'docs/tutorials/wiki2/src') diff --git a/docs/tutorials/wiki2/src/authorization/CHANGES.txt b/docs/tutorials/wiki2/src/authorization/CHANGES.txt new file mode 100644 index 000000000..35a34f332 --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/CHANGES.txt @@ -0,0 +1,4 @@ +0.0 +--- + +- Initial version diff --git a/docs/tutorials/wiki2/src/authorization/README.txt b/docs/tutorials/wiki2/src/authorization/README.txt new file mode 100644 index 000000000..d41f7f90f --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/README.txt @@ -0,0 +1,4 @@ +tutorial README + + + diff --git a/docs/tutorials/wiki2/src/authorization/setup.cfg b/docs/tutorials/wiki2/src/authorization/setup.cfg new file mode 100644 index 000000000..23b2ad983 --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/setup.cfg @@ -0,0 +1,27 @@ +[nosetests] +match=^test +nocapture=1 +cover-package=tutorial +with-coverage=1 +cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/wiki2/src/authorization/setup.py b/docs/tutorials/wiki2/src/authorization/setup.py new file mode 100644 index 000000000..eeac5c397 --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/setup.py @@ -0,0 +1,46 @@ +import os +import sys + +from setuptools import setup, find_packages + +here = os.path.abspath(os.path.dirname(__file__)) +README = open(os.path.join(here, 'README.txt')).read() +CHANGES = open(os.path.join(here, 'CHANGES.txt')).read() + +requires = [ + 'pyramid', + 'SQLAlchemy', + 'transaction', + 'repoze.tm2', + 'zope.sqlalchemy', + 'docutils' + ] + +if sys.version_info[:3] < (2,5,0): + requires.append('pysqlite') + +setup(name='tutorial', + version='0.0', + description='tutorial', + long_description=README + '\n\n' + CHANGES, + classifiers=[ + "Programming Language :: Python", + "Framework :: Pylons", + "Topic :: Internet :: WWW/HTTP", + "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", + ], + author='', + author_email='', + url='', + keywords='web wsgi pylons pyramid bfg', + packages=find_packages(), + include_package_data=True, + zip_safe=False, + test_suite='tutorial', + install_requires = requires, + entry_points = """\ + [paste.app_factory] + app = tutorial.run:app + """ + ) + diff --git a/docs/tutorials/wiki2/src/authorization/tutorial.ini b/docs/tutorials/wiki2/src/authorization/tutorial.ini new file mode 100644 index 000000000..85f131c2e --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial.ini @@ -0,0 +1,23 @@ +[DEFAULT] +debug = true + +[app:sqlalchemy] +use = egg:tutorial#app +reload_templates = true +debug_authorization = false +debug_notfound = false +debug_templates = true +default_locale_name = en +db_string = sqlite:///%(here)s/tutorial.db +db_echo = false + +[pipeline:main] +pipeline = + egg:Paste#evalerror + egg:repoze.tm2#tm + sqlalchemy + +[server:main] +use = egg:Paste#http +host = 0.0.0.0 +port = 6543 diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/__init__.py b/docs/tutorials/wiki2/src/authorization/tutorial/__init__.py new file mode 100644 index 000000000..cbdfd3ac6 --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/__init__.py @@ -0,0 +1,2 @@ +# A package + diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/configure.zcml b/docs/tutorials/wiki2/src/authorization/tutorial/configure.zcml new file mode 100644 index 000000000..03b0e5b5a --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/configure.zcml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/login.py b/docs/tutorials/wiki2/src/authorization/tutorial/login.py new file mode 100644 index 000000000..1a54d575c --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/login.py @@ -0,0 +1,39 @@ +from webob.exc import HTTPFound + +from pyramid.security import remember +from pyramid.security import forget +from pyramid.url import route_url + +from tutorial.security import USERS + +def login(request): + login_url = route_url('login', request) + referrer = request.url + if referrer == login_url: + referrer = '/' # never use the login form itself as came_from + came_from = request.params.get('came_from', referrer) + message = '' + login = '' + password = '' + if 'form.submitted' in request.params: + login = request.params['login'] + password = request.params['password'] + if USERS.get(login) == password: + headers = remember(request, login) + return HTTPFound(location = came_from, + headers = headers) + message = 'Failed login' + + return dict( + message = message, + url = request.application_url + '/login', + came_from = came_from, + login = login, + password = password, + ) + +def logout(request): + headers = forget(request) + return HTTPFound(location = route_url('view_wiki', request), + headers = headers) + diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/models.py b/docs/tutorials/wiki2/src/authorization/tutorial/models.py new file mode 100644 index 000000000..a77b4964c --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/models.py @@ -0,0 +1,52 @@ +import transaction + +from pyramid.security import Allow +from pyramid.security import Everyone + +from sqlalchemy import create_engine +from sqlalchemy import Column +from sqlalchemy import Integer +from sqlalchemy import Text + +from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.declarative import declarative_base + +from sqlalchemy.orm import scoped_session +from sqlalchemy.orm import 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) + + def __init__(self, name, data): + self.name = name + self.data = data + +def initialize_sql(db_string, echo=False): + engine = create_engine(db_string, echo=echo) + DBSession.configure(bind=engine) + Base.metadata.bind = engine + Base.metadata.create_all(engine) + try: + session = DBSession() + page = Page('FrontPage', 'initial data') + session.add(page) + transaction.commit() + except IntegrityError: + # already created + pass + +class RootFactory(object): + __acl__ = [ (Allow, Everyone, 'view'), + (Allow, 'group:editors', 'edit') ] + def __init__(self, request): + self.__dict__.update(request.matchdict) diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/run.py b/docs/tutorials/wiki2/src/authorization/tutorial/run.py new file mode 100644 index 000000000..82ce37490 --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/run.py @@ -0,0 +1,25 @@ +from pyramid.configuration import Configurator +from paste.deploy.converters import asbool + +from tutorial.models import initialize_sql +from tutorial.models import RootFactory + +def app(global_config, **settings): + """ This function returns a WSGI application. + + It is usually called by the PasteDeploy framework during + ``paster serve``. + """ + zcml_file = settings.get('configure_zcml', 'configure.zcml') + db_string = settings.get('db_string') + if db_string is None: + raise ValueError( + "No 'db_string' value in application configuration.") + db_echo = settings.get('db_echo', 'false') + initialize_sql(db_string, asbool(db_echo)) + config = Configurator(settings=settings, root_factory=RootFactory) + config.begin() + config.load_zcml(zcml_file) + config.end() + return config.make_wsgi_app() + diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/security.py b/docs/tutorials/wiki2/src/authorization/tutorial/security.py new file mode 100644 index 000000000..cfd13071e --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/security.py @@ -0,0 +1,8 @@ +USERS = {'editor':'editor', + 'viewer':'viewer'} +GROUPS = {'editor':['group:editors']} + +def groupfinder(userid, request): + if userid in USERS: + return GROUPS.get(userid, []) + diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/templates/edit.pt b/docs/tutorials/wiki2/src/authorization/tutorial/templates/edit.pt new file mode 100644 index 000000000..05e2ecd76 --- /dev/null +++ b/docs/tutorials/wiki2/src/authorization/tutorial/templates/edit.pt @@ -0,0 +1,35 @@ + + + + + + Pyramid tutorial wiki (based on TurboGears 20-Minute Wiki) + Editing: ${page.name} + + + + + +
+
Viewing + Page Name Goes Here
+ You can return to the FrontPage. + + Logout + +
+ +
+
+