Chris McDonough
2010-12-18 4c4f08969e64fe6878da0c0ce753d1e3fcdbbb56
resource/asset normalization
13 files modified
206 ■■■■■ changed files
CHANGES.txt 6 ●●●●● patch | view | raw | blame | history
docs/api/config.rst 4 ●●●● patch | view | raw | blame | history
docs/tutorials/catalog/index.rst 4 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/definingviews.rst 18 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/authorization/tutorial/login.py 6 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/authorization/tutorial/tests.py 25 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/authorization/tutorial/views.py 16 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/viewdecorators/tutorial/tests.py 25 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/viewdecorators/tutorial/views.py 16 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/views/tutorial/tests.py 24 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/views/tutorial/views.py 16 ●●●● patch | view | raw | blame | history
pyramid/tests/test_config.py 10 ●●●● patch | view | raw | blame | history
pyramid/tests/test_settings.py 36 ●●●●● patch | view | raw | blame | history
CHANGES.txt
@@ -24,14 +24,8 @@
      pyramid.traversal.ModelGraphTraverser -> 
                        pyramid.traversal.ResourceTreeTraverser
      pyramid.traversal.ModelGraphTraverser ->
                        pyramid.traversal.ResourceTreeTraverser
      pyramid.config.Configurator.testing_models ->
                        pyramid.config.Configurator.testing_resources
      pyramid.request.Request.model_url ->
                        pyramid.request.Request.resource_url
      pyramid.testing.registerModels ->
                        pyramid.testing.registerResources
docs/api/config.rst
@@ -32,7 +32,7 @@
     .. automethod:: maybe_dotted
     .. automethod:: absolute_resource_spec
     .. automethod:: absolute_asset_spec
     .. automethod:: setup_registry(settings=None, root_factory=None, authentication_policy=None, renderers=DEFAULT_RENDERERS, debug_logger=None, locale_negotiator=None, request_factory=None, renderer_globals_factory=None)
@@ -58,7 +58,7 @@
     .. automethod:: make_wsgi_app()
     .. automethod:: override_resource(to_override, override_with)
     .. automethod:: override_asset(to_override, override_with)
     .. automethod:: scan(package=None, categories=None)
docs/tutorials/catalog/index.rst
@@ -88,11 +88,11 @@
       Python 2.5.4 (r254:67916, Sep  4 2009, 02:12:16) 
       [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
       Type "help" for more information. "root" is the Pyramid app root object.
       >>> from pyramid.traversal import model_path
       >>> from pyramid.traversal import resource_path
       >>> from myapp.models import Document
       >>> root['name'] = Document('title')
       >>> doc = root['name']
       >>> docid = root.catalog.document_map.add(model_path(doc))
       >>> docid = root.catalog.document_map.add(resource_path(doc))
       >>> root.catalog.index_doc(docid, doc)
       >>> import transaction
       >>> transaction.commit()
docs/tutorials/wiki/definingviews.rst
@@ -51,15 +51,15 @@
The ``view_wiki`` view function
-------------------------------
The ``view_wiki`` function will be configured to respond as the
default view of a ``Wiki`` model object.  It always redirects to the
``Page`` object named "FrontPage".  It returns an instance of the
:class:`pyramid.httpexceptions.HTTPFound` class (instances of which
implement the WebOb :term:`response` interface), and the
:func:`pyramid.url.model_url` API.  :func:`pyramid.url.model_url`
constructs a URL to the ``FrontPage`` page
(e.g. ``http://localhost:6543/FrontPage``), and uses it as the
"location" of the HTTPFound response, forming an HTTP redirect.
The ``view_wiki`` function will be configured to respond as the default view
of a ``Wiki`` model object.  It always redirects to the ``Page`` object named
"FrontPage".  It returns an instance of the
:class:`pyramid.httpexceptions.HTTPFound` class (instances of which implement
the WebOb :term:`response` interface), and the
:func:`pyramid.url.resource_url` API.  :func:`pyramid.url.resource_url`
constructs a URL to the ``FrontPage`` page resource
(e.g. ``http://localhost:6543/FrontPage``), and uses it as the "location" of
the HTTPFound response, forming an HTTP redirect.
The ``view_page`` view function
-------------------------------
docs/tutorials/wiki/src/authorization/tutorial/login.py
@@ -1,7 +1,7 @@
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from pyramid.url import model_url
from pyramid.url import resource_url
from pyramid.security import remember
from pyramid.security import forget
@@ -11,7 +11,7 @@
@view_config(context=Wiki, name='login', renderer='templates/login.pt')
def login(request):
    login_url = model_url(request.context, request, 'login')
    login_url = resource_url(request.context, request, 'login')
    referrer = request.url
    if referrer == login_url:
        referrer = '/' # never use the login form itself as came_from
@@ -39,6 +39,6 @@
@view_config(context=Wiki, name='logout')
def logout(request):
    headers = forget(request)
    return HTTPFound(location = model_url(request.context, request),
    return HTTPFound(location = resource_url(request.context, request),
                     headers = headers)
    
docs/tutorials/wiki/src/authorization/tutorial/tests.py
@@ -43,7 +43,7 @@
class ViewWikiTests(unittest.TestCase):
    def test_it(self):
        from tutorial.views import view_wiki
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest()
        response = view_wiki(context, request)
        self.assertEqual(response.location, 'http://example.com/FrontPage')
@@ -54,9 +54,9 @@
        return view_page(context, request)
    def test_it(self):
        wiki = testing.DummyModel()
        wiki['IDoExist'] = testing.DummyModel()
        context = testing.DummyModel(data='Hello CruelWorld IDoExist')
        wiki = testing.DummyResource()
        wiki['IDoExist'] = testing.DummyResource()
        context = testing.DummyResource(data='Hello CruelWorld IDoExist')
        context.__parent__ = wiki
        context.__name__ = 'thepage'
        request = testing.DummyRequest()
@@ -80,17 +80,18 @@
        return add_page(context, request)
    def test_it_notsubmitted(self):
        from pyramid.url import model_url
        context = testing.DummyModel()
        from pyramid.url import resource_url
        context = testing.DummyResource()
        request = testing.DummyRequest()
        request.subpath = ['AnotherPage']
        info = self._callFUT(context, request)
        self.assertEqual(info['page'].data,'')
        self.assertEqual(info['save_url'],
                         model_url(context, request, 'add_page', 'AnotherPage'))
                         resource_url(
                             context, request, 'add_page', 'AnotherPage'))
        
    def test_it_submitted(self):
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest({'form.submitted':True,
                                        'body':'Hello yo!'})
        request.subpath = ['AnotherPage']
@@ -106,16 +107,16 @@
        return edit_page(context, request)
    def test_it_notsubmitted(self):
        from pyramid.url import model_url
        context = testing.DummyModel()
        from pyramid.url import resource_url
        context = testing.DummyResource()
        request = testing.DummyRequest()
        info = self._callFUT(context, request)
        self.assertEqual(info['page'], context)
        self.assertEqual(info['save_url'],
                         model_url(context, request, 'edit_page'))
                         resource_url(context, request, 'edit_page'))
        
    def test_it_submitted(self):
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest({'form.submitted':True,
                                        'body':'Hello yo!'})
        response = self._callFUT(context, request)
docs/tutorials/wiki/src/authorization/tutorial/views.py
@@ -2,7 +2,7 @@
import re
from pyramid.httpexceptions import HTTPFound
from pyramid.url import model_url
from pyramid.url import resource_url
from pyramid.security import authenticated_userid
@@ -16,7 +16,7 @@
@view_config(context=Wiki, permission='view')
def view_wiki(context, request):
    return HTTPFound(location = model_url(context, request, 'FrontPage'))
    return HTTPFound(location = resource_url(context, request, 'FrontPage'))
@view_config(context=Page, renderer='templates/view.pt', permission='view')
def view_page(context, request):
@@ -26,7 +26,7 @@
        word = match.group(1)
        if word in wiki:
            page = wiki[word]
            view_url = model_url(page, request)
            view_url = resource_url(page, request)
            return '<a href="%s">%s</a>' % (view_url, word)
        else:
            add_url = request.application_url + '/add_page/' + word 
@@ -34,7 +34,7 @@
    content = publish_parts(context.data, writer_name='html')['html_body']
    content = wikiwords.sub(check, content)
    edit_url = model_url(context, request, 'edit_page')
    edit_url = resource_url(context, request, 'edit_page')
    logged_in = authenticated_userid(request)
@@ -51,8 +51,8 @@
        page.__name__ = name
        page.__parent__ = context
        context[name] = page
        return HTTPFound(location = model_url(page, request))
    save_url = model_url(context, request, 'add_page', name)
        return HTTPFound(location = resource_url(page, request))
    save_url = resource_url(context, request, 'add_page', name)
    page = Page('')
    page.__name__ = name
    page.__parent__ = context
@@ -66,11 +66,11 @@
def edit_page(context, request):
    if 'form.submitted' in request.params:
        context.data = request.params['body']
        return HTTPFound(location = model_url(context, request))
        return HTTPFound(location = resource_url(context, request))
    logged_in = authenticated_userid(request)
    return dict(page = context,
                save_url = model_url(context, request, 'edit_page'),
                save_url = resource_url(context, request, 'edit_page'),
                logged_in = logged_in)
    
docs/tutorials/wiki/src/viewdecorators/tutorial/tests.py
@@ -43,7 +43,7 @@
class ViewWikiTests(unittest.TestCase):
    def test_it(self):
        from tutorial.views import view_wiki
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest()
        response = view_wiki(context, request)
        self.assertEqual(response.location, 'http://example.com/FrontPage')
@@ -54,9 +54,9 @@
        return view_page(context, request)
    def test_it(self):
        wiki = testing.DummyModel()
        wiki['IDoExist'] = testing.DummyModel()
        context = testing.DummyModel(data='Hello CruelWorld IDoExist')
        wiki = testing.DummyResource()
        wiki['IDoExist'] = testing.DummyResource()
        context = testing.DummyResource(data='Hello CruelWorld IDoExist')
        context.__parent__ = wiki
        context.__name__ = 'thepage'
        request = testing.DummyRequest()
@@ -80,17 +80,18 @@
        return add_page(context, request)
    def test_it_notsubmitted(self):
        from pyramid.url import model_url
        context = testing.DummyModel()
        from pyramid.url import resource_url
        context = testing.DummyResource()
        request = testing.DummyRequest()
        request.subpath = ['AnotherPage']
        info = self._callFUT(context, request)
        self.assertEqual(info['page'].data,'')
        self.assertEqual(info['save_url'],
                         model_url(context, request, 'add_page', 'AnotherPage'))
                         resource_url(
                             context, request, 'add_page', 'AnotherPage'))
        
    def test_it_submitted(self):
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest({'form.submitted':True,
                                        'body':'Hello yo!'})
        request.subpath = ['AnotherPage']
@@ -106,16 +107,16 @@
        return edit_page(context, request)
    def test_it_notsubmitted(self):
        from pyramid.url import model_url
        context = testing.DummyModel()
        from pyramid.url import resource_url
        context = testing.DummyResource()
        request = testing.DummyRequest()
        info = self._callFUT(context, request)
        self.assertEqual(info['page'], context)
        self.assertEqual(info['save_url'],
                         model_url(context, request, 'edit_page'))
                         resource_url(context, request, 'edit_page'))
        
    def test_it_submitted(self):
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest({'form.submitted':True,
                                        'body':'Hello yo!'})
        response = self._callFUT(context, request)
docs/tutorials/wiki/src/viewdecorators/tutorial/views.py
@@ -2,7 +2,7 @@
import re
from pyramid.httpexceptions import HTTPFound
from pyramid.url import model_url
from pyramid.url import resource_url
from pyramid.view import view_config
from tutorial.models import Page
@@ -13,7 +13,7 @@
@view_config(context=Wiki)
def view_wiki(context, request):
    return HTTPFound(location = model_url(context, request, 'FrontPage'))
    return HTTPFound(location = resource_url(context, request, 'FrontPage'))
@view_config(context=Page, renderer='templates/view.pt')
def view_page(context, request):
@@ -23,7 +23,7 @@
        word = match.group(1)
        if word in wiki:
            page = wiki[word]
            view_url = model_url(page, request)
            view_url = resource_url(page, request)
            return '<a href="%s">%s</a>' % (view_url, word)
        else:
            add_url = request.application_url + '/add_page/' + word 
@@ -31,7 +31,7 @@
    content = publish_parts(context.data, writer_name='html')['html_body']
    content = wikiwords.sub(check, content)
    edit_url = model_url(context, request, 'edit_page')
    edit_url = resource_url(context, request, 'edit_page')
    return dict(page = context, content = content, edit_url = edit_url)
    
@view_config(context=Wiki, name='add_page', renderer='templates/edit.pt')
@@ -43,8 +43,8 @@
        page.__name__ = name
        page.__parent__ = context
        context[name] = page
        return HTTPFound(location = model_url(page, request))
    save_url = model_url(context, request, 'add_page', name)
        return HTTPFound(location = resource_url(page, request))
    save_url = resource_url(context, request, 'add_page', name)
    page = Page('')
    page.__name__ = name
    page.__parent__ = context
@@ -54,9 +54,9 @@
def edit_page(context, request):
    if 'form.submitted' in request.params:
        context.data = request.params['body']
        return HTTPFound(location = model_url(context, request))
        return HTTPFound(location = resource_url(context, request))
    return dict(page = context,
                save_url = model_url(context, request, 'edit_page'))
                save_url = resource_url(context, request, 'edit_page'))
    
    
docs/tutorials/wiki/src/views/tutorial/tests.py
@@ -43,7 +43,7 @@
class ViewWikiTests(unittest.TestCase):
    def test_it(self):
        from tutorial.views import view_wiki
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest()
        response = view_wiki(context, request)
        self.assertEqual(response.location, 'http://example.com/FrontPage')
@@ -54,9 +54,9 @@
        return view_page(context, request)
    def test_it(self):
        wiki = testing.DummyModel()
        wiki['IDoExist'] = testing.DummyModel()
        context = testing.DummyModel(data='Hello CruelWorld IDoExist')
        wiki = testing.DummyResource()
        wiki['IDoExist'] = testing.DummyResource()
        context = testing.DummyResource(data='Hello CruelWorld IDoExist')
        context.__parent__ = wiki
        context.__name__ = 'thepage'
        request = testing.DummyRequest()
@@ -80,18 +80,18 @@
        return add_page(context, request)
    def test_it_notsubmitted(self):
        from pyramid.url import model_url
        context = testing.DummyModel()
        from pyramid.url import resource_url
        context = testing.DummyResource()
        request = testing.DummyRequest()
        request.subpath = ['AnotherPage']
        info = self._callFUT(context, request)
        self.assertEqual(info['page'].data,'')
        self.assertEqual(
            info['save_url'],
            model_url(context, request, 'add_page', 'AnotherPage'))
            resource_url(context, request, 'add_page', 'AnotherPage'))
        
    def test_it_submitted(self):
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest({'form.submitted':True,
                                        'body':'Hello yo!'})
        request.subpath = ['AnotherPage']
@@ -107,16 +107,16 @@
        return edit_page(context, request)
    def test_it_notsubmitted(self):
        from pyramid.url import model_url
        context = testing.DummyModel()
        from pyramid.url import resource_url
        context = testing.DummyResource()
        request = testing.DummyRequest()
        info = self._callFUT(context, request)
        self.assertEqual(info['page'], context)
        self.assertEqual(info['save_url'],
                         model_url(context, request, 'edit_page'))
                         resource_url(context, request, 'edit_page'))
        
    def test_it_submitted(self):
        context = testing.DummyModel()
        context = testing.DummyResource()
        request = testing.DummyRequest({'form.submitted':True,
                                        'body':'Hello yo!'})
        response = self._callFUT(context, request)
docs/tutorials/wiki/src/views/tutorial/views.py
@@ -2,7 +2,7 @@
import re
from pyramid.httpexceptions import HTTPFound
from pyramid.url import model_url
from pyramid.url import resource_url
from tutorial.models import Page
@@ -10,7 +10,7 @@
wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")
def view_wiki(context, request):
    return HTTPFound(location = model_url(context, request, 'FrontPage'))
    return HTTPFound(location = resource_url(context, request, 'FrontPage'))
def view_page(context, request):
    wiki = context.__parent__
@@ -19,7 +19,7 @@
        word = match.group(1)
        if word in wiki:
            page = wiki[word]
            view_url = model_url(page, request)
            view_url = resource_url(page, request)
            return '<a href="%s">%s</a>' % (view_url, word)
        else:
            add_url = request.application_url + '/add_page/' + word 
@@ -27,7 +27,7 @@
    content = publish_parts(context.data, writer_name='html')['html_body']
    content = wikiwords.sub(check, content)
    edit_url = model_url(context, request, 'edit_page')
    edit_url = resource_url(context, request, 'edit_page')
    return dict(page = context, content = content, edit_url = edit_url)
    
def add_page(context, request):
@@ -38,8 +38,8 @@
        page.__name__ = name
        page.__parent__ = context
        context[name] = page
        return HTTPFound(location = model_url(page, request))
    save_url = model_url(context, request, 'add_page', name)
        return HTTPFound(location = resource_url(page, request))
    save_url = resource_url(context, request, 'add_page', name)
    page = Page('')
    page.__name__ = name
    page.__parent__ = context
@@ -48,9 +48,9 @@
def edit_page(context, request):
    if 'form.submitted' in request.params:
        context.data = request.params['body']
        return HTTPFound(location = model_url(context, request))
        return HTTPFound(location = resource_url(context, request))
    return dict(page = context,
                save_url = model_url(context, request, 'edit_page'))
                save_url = resource_url(context, request, 'edit_page'))
    
    
pyramid/tests/test_config.py
@@ -3153,14 +3153,14 @@
        self.assertEqual(ut.groupids, ('group1', 'group2'))
        self.assertEqual(ut.permissive, False)
    def test_testing_models(self):
        from pyramid.traversal import find_model
    def test_testing_resources(self):
        from pyramid.traversal import find_resource
        from pyramid.interfaces import ITraverser
        ob1 = object()
        ob2 = object()
        models = {'/ob1':ob1, '/ob2':ob2}
        resources = {'/ob1':ob1, '/ob2':ob2}
        config = self._makeOne(autocommit=True)
        config.testing_models(models)
        config.testing_resources(resources)
        adapter = config.registry.getAdapter(None, ITraverser)
        result = adapter({'PATH_INFO':'/ob1'})
        self.assertEqual(result['context'], ob1)
@@ -3179,7 +3179,7 @@
        self.assertRaises(KeyError, adapter, {'PATH_INFO':'/ob3'})
        try:
            config.begin()
            self.assertEqual(find_model(None, '/ob1'), ob1)
            self.assertEqual(find_resource(None, '/ob1'), ob1)
        finally:
            config.end()
pyramid/tests/test_settings.py
@@ -45,40 +45,76 @@
        self.assertEqual(result['reload_templates'], True)
    def test_reload_resources(self):
        # alias for reload_assets
        result = self._makeOne({})
        self.assertEqual(result['reload_resources'], False)
        self.assertEqual(result['reload_assets'], False)
        result = self._makeOne({'reload_resources':'false'})
        self.assertEqual(result['reload_resources'], False)
        self.assertEqual(result['reload_assets'], False)
        result = self._makeOne({'reload_resources':'t'})
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
        result = self._makeOne({'reload_resources':'1'})
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
        result = self._makeOne({}, {'BFG_RELOAD_RESOURCES':'1'})
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
        result = self._makeOne({'reload_resources':'false'},
                             {'BFG_RELOAD_RESOURCES':'1'})
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
    def test_reload_assets(self):
        # alias for reload_resources
        result = self._makeOne({})
        self.assertEqual(result['reload_assets'], False)
        self.assertEqual(result['reload_resources'], False)
        result = self._makeOne({'reload_assets':'false'})
        self.assertEqual(result['reload_resources'], False)
        self.assertEqual(result['reload_assets'], False)
        result = self._makeOne({'reload_assets':'t'})
        self.assertEqual(result['reload_assets'], True)
        self.assertEqual(result['reload_resources'], True)
        result = self._makeOne({'reload_assets':'1'})
        self.assertEqual(result['reload_assets'], True)
        self.assertEqual(result['reload_resources'], True)
        result = self._makeOne({}, {'BFG_RELOAD_ASSETS':'1'})
        self.assertEqual(result['reload_assets'], True)
        self.assertEqual(result['reload_resources'], True)
        result = self._makeOne({'reload_assets':'false'},
                             {'BFG_RELOAD_ASSETS':'1'})
        self.assertEqual(result['reload_assets'], True)
        self.assertEqual(result['reload_resources'], True)
    def test_reload_all(self):
        result = self._makeOne({})
        self.assertEqual(result['reload_templates'], False)
        self.assertEqual(result['reload_resources'], False)
        self.assertEqual(result['reload_assets'], False)
        result = self._makeOne({'reload_all':'false'})
        self.assertEqual(result['reload_templates'], False)
        self.assertEqual(result['reload_resources'], False)
        self.assertEqual(result['reload_assets'], False)
        result = self._makeOne({'reload_all':'t'})
        self.assertEqual(result['reload_templates'], True)
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
        result = self._makeOne({'reload_all':'1'})
        self.assertEqual(result['reload_templates'], True)
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
        result = self._makeOne({}, {'BFG_RELOAD_ALL':'1'})
        self.assertEqual(result['reload_templates'], True)
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
        result = self._makeOne({'reload_all':'false'},
                             {'BFG_RELOAD_ALL':'1'})
        self.assertEqual(result['reload_templates'], True)
        self.assertEqual(result['reload_resources'], True)
        self.assertEqual(result['reload_assets'], True)
    def test_debug_authorization(self):
        result = self._makeOne({})