class SubController(object): mounted_app = WSGIAppController(wsgi_app) before = BeforeController() newbefore = NewBeforeController() @expose('genshi') def unknown_template(self): return "sub unknown template" @expose() def foo(self, ): return 'sub_foo' @expose() def index(self): return 'sub index' @expose() def _default(self, *args): return "received the following args (from the url): %s" % list(args) @expose() def redirect_me(self, target, **kw): tg.redirect(target, **kw) @expose() def redirect_sub(self): tg.redirect('index') @expose() def hello(self, name): return "Why hello, %s!" % name
def _lookup(self, host_addr, *rest): log.debug("Proxy for %s", host_addr) proxy = self.proxies.setdefault( host_addr, WSGIAppController(make_proxy(config, "http://%s" % host_addr))) log.debug("PROXIES %s", str(self.proxies)) return proxy, rest
class RootController(TGController): custom_allow = CustomAllowOnly() smart_allow = SmartDenialAllowOnly() cp = ControlPanel() rest = DaRestController() mounted_app = WSGIAppController(wsgi_app, allow_only=is_user('gustavo')) @expose() def index(self): return "you're in the main page" @expose() @require(is_user('developer')) def commit(self): return 'you can commit' @expose('json:') @require(is_user('developer'), smart_denial=True) def smartabort(self): return {'key': 'value'} @expose() @require(in_group('managers')) @require(has_permission('commit')) def force_commit(self): return 'you can commit'
def load_wsgi_applications(self): log.info('Loading moksha WSGI applications') for app_entry in pkg_resources.iter_entry_points('moksha.wsgiapp'): log.info('Loading %s WSGI application' % app_entry.name) app_path = app_entry.dist.location app_class = app_entry.load() moksha.utils._apps[app_entry.name] = { 'name': getattr(app_class, 'name', app_entry.name), 'controller': WSGIAppController(app_class), 'path': app_path, 'model': None, }
class RootController(TGController): custom_allow = CustomAllowOnly() smart_allow = SmartDenialAllowOnly() cp = ControlPanel() rest = DaRestController() mounted_app = WSGIAppController(wsgi_app, allow_only=is_user('gustavo')) @expose() def index(self): return "you're in the main page" @expose() @require(is_user('developer')) def commit(self): return 'you can commit' @expose('json:') @require(is_user('developer'), smart_denial=True) def smartabort(self): return {'key': 'value'} @expose() def passthrough_abort(self): abort(403, passthrough='json') @expose() def passthrough_explicit(self): request.disable_auth_challenger() abort(403) @expose() @require(in_group('managers')) @require(has_permission('commit')) def force_commit(self): return 'you can commit' @expose() def login_logout(self, username, noidentifier='0'): if noidentifier == '1': request.environ['repoze.who.plugins'] = {} if username == 'logout': auth_force_logout() else: auth_force_login('%s:managers' % username) return 'OK'
class RootController(TGController): cp = ControlPanel() rest = DaRestController() mounted_app = WSGIAppController(wsgi_app, allow_only=is_user('gustavo')) @expose() def index(self): return "you're in the main page" @expose() @require(is_user('developer')) def commit(self): return 'you can commit'
class SubController(object): mounted_app = WSGIAppController(wsgi_app) before = BeforeController() newbefore = NewBeforeController() @expose('genshi') def unknown_template(self): return "sub unknown template" @expose() def foo(self, ): return 'sub_foo' @expose() def index(self): return 'sub index' @expose() def _default(self, *args): return "received the following args (from the url): %s" % ', '.join( args) @expose() def redirect_me(self, target, **kw): tg.redirect(target, **kw) @expose() def redirect_sub(self): tg.redirect('index') @expose() def hello(self, name): return "Why hello, %s!" % name @expose() def get_controller_state(self): return '/'.join( [p[0] for p in tg.request.controller_state.controller_path]) @expose() def get_dispatch_state(self): return '/'.join( [p[0] for p in tg.request.dispatch_state.controller_path])
class SubController(object): mounted_app = WSGIAppController(wsgi_app) before = BeforeController() @expose('genshi') def unknown_template(self): return "sub unknown template" @expose() def foo(self, ): return 'sub_foo' @expose() def index(self): return 'sub index' @expose() def default(self, *args): return ("recieved the following args (from the url): %s" % list(args)) @expose() def redirect_me(self, target, **kw): tg.redirect(target, **kw) @expose() def redirect_sub(self): tg.redirect('index') @expose() def hello(self, name): return "Why HELLO! " + name @expose("genshi:tg.tests.non_overridden") def template_override(self, override=False): if override: override_template(self.template_override, "genshi:tg.tests.overridden") return dict()
class RootController(TGController): custom_allow = CustomAllowOnly() cp = ControlPanel() rest = DaRestController() mounted_app = WSGIAppController(wsgi_app, allow_only=is_user('gustavo')) @expose() def index(self): return "you're in the main page" @expose() @require(is_user('developer')) def commit(self): return 'you can commit' @expose() @require(is_user('developer'), smart_denial=True) def smartabort(self): return {'key': 'value'}
class BasicTGController(TGController): mounted_app = WSGIAppController(wsgi_app) xml_rpc = WSGIAppController(XMLRpcTestController()) error_controller = RemoteErrorHandler() lookup = LookupController() lookup_with_args = LookupControllerWithArgs() lookup_with_sub = LookupControllerWithSubcontroller() self_calling = SelfCallingLookupController() @expose() def use_wsgi_app(self): return tg.use_wsgi_app(wsgi_app) @expose(content_type='application/rss+xml') def ticket2351(self, **kw): return 'test' @expose() def index(self, **kwargs): return 'hello world' @expose(content_type='application/rss+xml') def index_unicode(self): tg.response.charset = None return u_('Hello World') @expose() def _default(self, *remainder): return "Main default page called for url /%s" % [ str(r) for r in remainder ] @expose() def response_responded(self): tg.response.body = b'Body Response' tg.response.content_type = 'text/plain' tg.response.charset = 'utf-8' return tg.response @expose() def feed(self, feed=None): return feed sub = SubController() sub2 = SubController2() sub3 = SubController3() sub4 = SubController4() sub5 = SubController5() embedded_lookup = LookupWithEmbeddedLookupController() embedded_lookup_with_index = LookupWithEmbeddedLookupWithHelperWithIndex() @expose() def test_args(self, name, one=None, two=2, three=3): return "name=%s, one=%s, two=%s, three=%s" % (name, one, two, three) @expose() def redirect_me(self, target, **kw): tg.redirect(target, kw) @expose() def hello(self, name, silly=None): return "Hello " + name @expose() def optional_and_req_args(self, name, one=None, two=2, three=3): return "name=%s, one=%s, two=%s, three=%s" % (name, one, two, three) @expose() def ticket2412(self, arg1): return arg1 @expose() def redirect_cookie(self, name): tg.response.set_cookie('name', name) tg.redirect('/hello_cookie') @expose() def hello_cookie(self): return "Hello " + tg.request.cookies['name'] @expose() def flash_redirect(self): tg.flash("Wow, flash!") tg.redirect("/flash_after_redirect") @expose() def flash_unicode(self): tg.flash(u_("Привет, мир!")) tg.redirect("/flash_after_redirect") @expose() def flash_after_redirect(self): return tg.get_flash() @expose() def flash_status(self): return tg.get_status() @expose() def flash_no_redirect(self): tg.flash("Wow, flash!") return tg.get_flash() @expose('json') @validate(validators=dict(some_int=validators.Int())) def validated_int(self, some_int): assert isinstance(some_int, int) return dict(response=some_int) @expose('json') @validate(validators=dict(a=validators.Int())) def validated_and_unvalidated(self, a, b): assert isinstance(a, int) assert isinstance(b, unicode_text) return dict(int=a, str=b) @expose() def error_handler(self, **kw): return 'validation error handler' @expose('json') @validate(validators=dict(a=validators.Int()), error_handler=error_handler) def validated_with_error_handler(self, a, b): assert isinstance(a, int) assert isinstance(b, unicode_text) return dict(int=a, str=b) @expose('json') @validate(validators=dict(a=validators.Int()), error_handler=error_controller.errors_here) def validated_with_remote_error_handler(self, a, b): assert isinstance(a, int) assert isinstance(b, unicode_text) return dict(int=a, str=b) @expose() @expose('json') def stacked_expose(self): return dict(got_json=True) @expose('json') def bad_json(self): return [(1, 'a'), 'b'] @expose() def custom_content_type_in_controller(self): tg.response.headers['content-type'] = 'image/png' return b'PNG' @expose('json', content_type='application/json') def custom_content_type_in_controller_charset(self): tg.response.headers['content-type'] = 'application/json; charset=utf-8' return dict(result='TXT') @expose(content_type='image/png') def custom_content_type_in_decorator(self): return b'PNG' @expose() def test_204(self, *args, **kw): from webob.exc import HTTPNoContent raise HTTPNoContent() @expose() def custom_content_type_replace_header(self): replace_header(tg.response.headerlist, 'Content-Type', 'text/xml') return "<?xml version='1.0'?>" @expose() def multi_value_kws(sekf, *args, **kw): assert kw['foo'] == ['1', '2'], kw @expose() def with_routing_args(self, **kw): return str(tg.request._controller_state.routing_args) @expose('json') def get_response_type(self): return dict(ctype=tg.request.response_type) @expose() def hello_ext(self, *args): return str(tg.request.response_ext)
WidgetBrowser. This gives you the ability to write your documentation in reStructuredText, and easily expose it in your application via the `/apps/docs` URL. Since it integrates the ToscaWidgets WidgetBrowser, this also gives you the ability to create Widget demos and embed them in your documentation. .. seealso:: See the ToscaWidgets WidgetBrowser documentation for more information http://toscawidgets.org/documentation/WidgetBrowser/widget_demo_howto.html .. moduleauthor:: Luke Macken <*****@*****.**> """ import os from tg import config from tg.controllers import WSGIAppController from pkg_resources import resource_filename from moksha.widgetbrowser import WidgetBrowser os.environ['TW_BROWSER_PREFIX'] = '/apps/docs' docs = WSGIAppController( WidgetBrowser( template_dirs=[resource_filename('moksha.widgetbrowser', 'templates')], docs_dir=config.get('docs_dir', 'docs'), full_stack=False, interactive=False))
class BasicTGController(TGController): mounted_app = WSGIAppController(wsgi_app) error_controller = RemoteErrorHandler() lookup = LoookupController() deco_lookup = DecoLookupController() deco_default = DecoDefaultController() @expose() def index(self, **kwargs): return 'hello world' @expose() def default(self, *remainder): return "Main Default Page called for url /%s" % list(remainder) @expose() def feed(self, feed=None): return feed sub = SubController() sub2 = SubController2() @expose() def redirect_me(self, target, **kw): tg.redirect(target, kw) @expose() def hello(self, name, silly=None): return "Hello " + name @expose() def redirect_cookie(self, name): pylons.response.set_cookie('name', name) tg.redirect('/hello_cookie') @expose() def hello_cookie(self): return "Hello " + pylons.request.cookies['name'] @expose() def flash_redirect(self): tg.flash("Wow, flash!") tg.redirect("/flash_after_redirect") @expose() def flash_unicode(self): tg.flash(u"Привет, мир!") tg.redirect("/flash_after_redirect") @expose() def flash_after_redirect(self): return tg.get_flash() @expose() def flash_status(self): return tg.get_status() @expose() def flash_no_redirect(self): tg.flash("Wow, flash!") return tg.get_flash() @expose('json') @validate(validators={"some_int": validators.Int()}) def validated_int(self, some_int): assert isinstance(some_int, int) return dict(response=some_int) @expose('json') @validate(validators={"a": validators.Int()}) def validated_and_unvalidated(self, a, b): assert isinstance(a, int) assert isinstance(b, unicode) return dict(int=a, str=b) @expose() def error_handler(self, **kw): return 'VALIDATION ERROR HANDLER' @expose('json') @validate(validators={"a": validators.Int()}, error_handler=error_handler) def validated_with_error_handler(self, a, b): assert isinstance(a, int) assert isinstance(b, unicode) return dict(int=a, str=b) @expose('json') @validate(validators={"a": validators.Int()}, error_handler=error_controller.errors_here) def validated_with_remote_error_handler(self, a, b): assert isinstance(a, int) assert isinstance(b, unicode) return dict(int=a, str=b) @expose() @expose('json') def stacked_expose(self, tg_format=None): return dict(got_json=True) @expose(content_type=CUSTOM_CONTENT_TYPE) def custom_content_type(self): pylons.response.headers['content-type'] = 'image/png' return 'PNG' @expose() def multi_value_kws(sekf, *args, **kw): assert kw['foo'] == ['1', '2'], kw
# This file is part of Moksha. # Copyright (C) 2008-2010 Red Hat, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Authors: Luke Macken <*****@*****.**> from tg.controllers import WSGIAppController from pylons import cache from moksha.widgetbrowser import WidgetBrowser from moksha.widgets.feedtree import moksha_feedreader from moksha.controllers.apps import AppController app_controller = WSGIAppController(AppController()) @WidgetBrowser.register_controller(moksha_feedreader, '/apps/feeds/init_tree') def init_tree(self, key, fresh=False, **kw): return app_controller