# HG changeset patch # User Christophe de Vienne # Date 1404663931 -7200 # Node ID 7b7ed56bf2fbd06cddb28986eb12f55eb8f9bfcc # Parent 151b8a4b9f3f8f987010fe2bd9c24f04cb4e88b4 Add a basic sample application Related to #4291173 diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/CHANGES.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/CHANGES.txt Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,4 @@ +0.0 +--- + +- Initial version diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/MANIFEST.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/MANIFEST.in Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,2 @@ +include *.txt *.ini *.cfg *.rst +recursive-include sampleapp *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/README.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/README.txt Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,1 @@ +sampleapp README diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/development.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/development.ini Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,65 @@ +### +# app configuration +# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html +### + +[app:main] +use = egg:sampleapp + +pyramid.reload_templates = true +pyramid.debug_authorization = false +pyramid.debug_notfound = false +pyramid.debug_routematch = false +pyramid.default_locale_name = en +pyramid.includes = + pyramid_debugtoolbar + pyramid_cubicweb + +cubicweb.instance = test + +session.secret = AhQuupai6ahGh0Zohph7yoo7oojaiFa5ahF7AiLoh6ua6sha3PaaVua8aenohled + +# By default, the toolbar only appears for clients from IP addresses +# '127.0.0.1' and '::1'. +# debugtoolbar.hosts = 127.0.0.1 ::1 + +### +# wsgi server configuration +### + +[server:main] +use = egg:waitress#main +host = 0.0.0.0 +port = 8080 + +### +# logging configuration +# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html +### + +[loggers] +keys = root, sampleapp + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = INFO +handlers = console + +[logger_sampleapp] +level = DEBUG +handlers = +qualname = sampleapp + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/production.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/production.ini Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,58 @@ +### +# app configuration +# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html +### + +[app:main] +use = egg:cubi + +pyramid.reload_templates = false +pyramid.debug_authorization = false +pyramid.debug_notfound = false +pyramid.debug_routematch = false +pyramid.default_locale_name = en + +pyramid.includes = cw_pyramid + +cubicweb.instance = test + +### +# wsgi server configuration +### + +[server:main] +use = egg:waitress#main +host = 0.0.0.0 +port = 6543 + +### +# logging configuration +# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html +### + +[loggers] +keys = root, cubi + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console + +[logger_cubi] +level = WARN +handlers = +qualname = cubi + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/sampleapp/__init__.py Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,11 @@ +from pyramid.config import Configurator + + +def main(global_config, **settings): + """ This function returns a Pyramid WSGI application. + """ + config = Configurator(settings=settings) +# config.add_static_view('static', 'static', cache_max_age=3600) +# config.add_route('home', '/') +# config.scan() + return config.make_wsgi_app() diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/favicon.ico Binary file sampleapp/sampleapp/static/favicon.ico has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/footerbg.png Binary file sampleapp/sampleapp/static/footerbg.png has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/headerbg.png Binary file sampleapp/sampleapp/static/headerbg.png has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/ie6.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/sampleapp/static/ie6.css Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,8 @@ +* html img, +* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none", +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')", +this.src = "static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''), +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')", +this.runtimeStyle.backgroundImage = "none")),this.pngSet=true) +);} +#wrap{display:table;height:100%} diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/middlebg.png Binary file sampleapp/sampleapp/static/middlebg.png has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/pylons.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/sampleapp/static/pylons.css Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,372 @@ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td +{ + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; /* 16px */ + vertical-align: baseline; + background: transparent; +} + +body +{ + line-height: 1; +} + +ol, ul +{ + list-style: none; +} + +blockquote, q +{ + quotes: none; +} + +blockquote:before, blockquote:after, q:before, q:after +{ + content: ''; + content: none; +} + +:focus +{ + outline: 0; +} + +ins +{ + text-decoration: none; +} + +del +{ + text-decoration: line-through; +} + +table +{ + border-collapse: collapse; + border-spacing: 0; +} + +sub +{ + vertical-align: sub; + font-size: smaller; + line-height: normal; +} + +sup +{ + vertical-align: super; + font-size: smaller; + line-height: normal; +} + +ul, menu, dir +{ + display: block; + list-style-type: disc; + margin: 1em 0; + padding-left: 40px; +} + +ol +{ + display: block; + list-style-type: decimal-leading-zero; + margin: 1em 0; + padding-left: 40px; +} + +li +{ + display: list-item; +} + +ul ul, ul ol, ul dir, ul menu, ul dl, ol ul, ol ol, ol dir, ol menu, ol dl, dir ul, dir ol, dir dir, dir menu, dir dl, menu ul, menu ol, menu dir, menu menu, menu dl, dl ul, dl ol, dl dir, dl menu, dl dl +{ + margin-top: 0; + margin-bottom: 0; +} + +ol ul, ul ul, menu ul, dir ul, ol menu, ul menu, menu menu, dir menu, ol dir, ul dir, menu dir, dir dir +{ + list-style-type: circle; +} + +ol ol ul, ol ul ul, ol menu ul, ol dir ul, ol ol menu, ol ul menu, ol menu menu, ol dir menu, ol ol dir, ol ul dir, ol menu dir, ol dir dir, ul ol ul, ul ul ul, ul menu ul, ul dir ul, ul ol menu, ul ul menu, ul menu menu, ul dir menu, ul ol dir, ul ul dir, ul menu dir, ul dir dir, menu ol ul, menu ul ul, menu menu ul, menu dir ul, menu ol menu, menu ul menu, menu menu menu, menu dir menu, menu ol dir, menu ul dir, menu menu dir, menu dir dir, dir ol ul, dir ul ul, dir menu ul, dir dir ul, dir ol menu, dir ul menu, dir menu menu, dir dir menu, dir ol dir, dir ul dir, dir menu dir, dir dir dir +{ + list-style-type: square; +} + +.hidden +{ + display: none; +} + +p +{ + line-height: 1.5em; +} + +h1 +{ + font-size: 1.75em; + line-height: 1.7em; + font-family: helvetica, verdana; +} + +h2 +{ + font-size: 1.5em; + line-height: 1.7em; + font-family: helvetica, verdana; +} + +h3 +{ + font-size: 1.25em; + line-height: 1.7em; + font-family: helvetica, verdana; +} + +h4 +{ + font-size: 1em; + line-height: 1.7em; + font-family: helvetica, verdana; +} + +html, body +{ + width: 100%; + height: 100%; +} + +body +{ + margin: 0; + padding: 0; + background-color: #fff; + position: relative; + font: 16px/24px NobileRegular, "Lucida Grande", Lucida, Verdana, sans-serif; +} + +a +{ + color: #1b61d6; + text-decoration: none; +} + +a:hover +{ + color: #e88f00; + text-decoration: underline; +} + +body h1, body h2, body h3, body h4, body h5, body h6 +{ + font-family: NeutonRegular, "Lucida Grande", Lucida, Verdana, sans-serif; + font-weight: 400; + color: #373839; + font-style: normal; +} + +#wrap +{ + min-height: 100%; +} + +#header, #footer +{ + width: 100%; + color: #fff; + height: 40px; + position: absolute; + text-align: center; + line-height: 40px; + overflow: hidden; + font-size: 12px; + vertical-align: middle; +} + +#header +{ + background: #000; + top: 0; + font-size: 14px; +} + +#footer +{ + bottom: 0; + background: #000 url(footerbg.png) repeat-x 0 top; + position: relative; + margin-top: -40px; + clear: both; +} + +.header, .footer +{ + width: 750px; + margin-right: auto; + margin-left: auto; +} + +.wrapper +{ + width: 100%; +} + +#top, #top-small, #bottom +{ + width: 100%; +} + +#top +{ + color: #000; + height: 230px; + background: #fff url(headerbg.png) repeat-x 0 top; + position: relative; +} + +#top-small +{ + color: #000; + height: 60px; + background: #fff url(headerbg.png) repeat-x 0 top; + position: relative; +} + +#bottom +{ + color: #222; + background-color: #fff; +} + +.top, .top-small, .middle, .bottom +{ + width: 750px; + margin-right: auto; + margin-left: auto; +} + +.top +{ + padding-top: 40px; +} + +.top-small +{ + padding-top: 10px; +} + +#middle +{ + width: 100%; + height: 100px; + background: url(middlebg.png) repeat-x; + border-top: 2px solid #fff; + border-bottom: 2px solid #b2b2b2; +} + +.app-welcome +{ + margin-top: 25px; +} + +.app-name +{ + color: #000; + font-weight: 700; +} + +.bottom +{ + padding-top: 50px; +} + +#left +{ + width: 350px; + float: left; + padding-right: 25px; +} + +#right +{ + width: 350px; + float: right; + padding-left: 25px; +} + +.align-left +{ + text-align: left; +} + +.align-right +{ + text-align: right; +} + +.align-center +{ + text-align: center; +} + +ul.links +{ + margin: 0; + padding: 0; +} + +ul.links li +{ + list-style-type: none; + font-size: 14px; +} + +form +{ + border-style: none; +} + +fieldset +{ + border-style: none; +} + +input +{ + color: #222; + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 12px; + line-height: 16px; +} + +input[type=text], input[type=password] +{ + width: 205px; +} + +input[type=submit] +{ + background-color: #ddd; + font-weight: 700; +} + +/*Opera Fix*/ +body:before +{ + content: ""; + height: 100%; + float: left; + width: 0; + margin-top: -32767px; +} diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/pyramid-small.png Binary file sampleapp/sampleapp/static/pyramid-small.png has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/pyramid.png Binary file sampleapp/sampleapp/static/pyramid.png has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/static/transparent.gif Binary file sampleapp/sampleapp/static/transparent.gif has changed diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/templates/mytemplate.pt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/sampleapp/templates/mytemplate.pt Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,76 @@ + + + + The Pyramid Web Application Development Framework + + + + + + + + + + +
+
+
+
pyramid
+
+
+
+
+

+ Welcome to ${project}, an application generated by
+ the Pyramid web application development framework. +

+
+
+
+
+
+

Search documentation

+
+ + +
+
+ +
+
+
+ + + diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/tests.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/sampleapp/tests.py Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,17 @@ +import unittest + +from pyramid import testing + + +class ViewTests(unittest.TestCase): + def setUp(self): + self.config = testing.setUp() + + def tearDown(self): + testing.tearDown() + + def test_my_view(self): + from .views import my_view + request = testing.DummyRequest() + info = my_view(request) + self.assertEqual(info['project'], 'cubi') diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/sampleapp/views.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/sampleapp/views.py Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,6 @@ +from pyramid.view import view_config + + +@view_config(route_name='home', renderer='templates/mytemplate.pt') +def my_view(request): + return {'project': 'sampleapp'} diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/setup.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/setup.cfg Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,27 @@ +[nosetests] +match = ^test +nocapture = 1 +cover-package = sampleapp +with-coverage = 1 +cover-erase = 1 + +[compile_catalog] +directory = sampleapp/locale +domain = sampleapp +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = sampleapp/locale/sampleapp.pot +width = 80 + +[init_catalog] +domain = sampleapp +input_file = sampleapp/locale/sampleapp.pot +output_dir = sampleapp/locale + +[update_catalog] +domain = sampleapp +input_file = sampleapp/locale/sampleapp.pot +output_dir = sampleapp/locale +previous = true diff -r 151b8a4b9f3f -r 7b7ed56bf2fb sampleapp/setup.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sampleapp/setup.py Sun Jul 06 18:25:31 2014 +0200 @@ -0,0 +1,39 @@ +import os + +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', + 'pyramid_debugtoolbar', + 'waitress', + ] + +setup(name='sampleapp', + version='0.0', + description='sampleapp', + long_description=README + '\n\n' + CHANGES, + classifiers=[ + "Programming Language :: Python", + "Framework :: Pyramid", + "Topic :: Internet :: WWW/HTTP", + "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", + ], + author='', + author_email='', + url='', + keywords='web pyramid pylons', + packages=find_packages(), + include_package_data=True, + zip_safe=False, + install_requires=requires, + tests_require=requires, + test_suite="sampleapp", + entry_points="""\ + [paste.app_factory] + main = sampleapp:main + """, + )