From 370862eb748f74dacee6b2bb1a5a2e35f865018a Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Sat, 22 Nov 2014 23:31:50 -0800 Subject: add request processing diagram to docs/narr/router.rst --- docs/_static/pyramid_router.svg | 3 +++ docs/narr/router.rst | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 docs/_static/pyramid_router.svg (limited to 'docs') diff --git a/docs/_static/pyramid_router.svg b/docs/_static/pyramid_router.svg new file mode 100644 index 000000000..21bbcb532 --- /dev/null +++ b/docs/_static/pyramid_router.svg @@ -0,0 +1,3 @@ + + +2014-11-23 07:19ZRequest Processingno exceptionsmiddleware ingress tween ingresstraversalContextFoundtween egressresponse callbacksfinished callbacksmiddleware egressBeforeRenderRequest ProcessingLegendeventcallbackviewexternal process (middleware, tween)internal processview pipelinepredicatesview lookuproute predicatesURL dispatchNewRequestNewResponseview mapper ingressviewview mapper egressresponse adapterdecorators ingressdecorators egressauthorization diff --git a/docs/narr/router.rst b/docs/narr/router.rst index ac3deefdc..745c2faa1 100644 --- a/docs/narr/router.rst +++ b/docs/narr/router.rst @@ -9,6 +9,9 @@ Request Processing ================== +.. image:: ../_static/pyramid_router.svg + :alt: Request Processing + Once a :app:`Pyramid` application is up and running, it is ready to accept requests and return responses. What happens from the time a :term:`WSGI` request enters a :app:`Pyramid` application through to the point that -- cgit v1.2.3 From d89c5f76b3032a1447f19dc87a7a6ceb7508c3cb Mon Sep 17 00:00:00 2001 From: Hugo Branquinho Date: Tue, 25 Nov 2014 19:38:24 +0000 Subject: Documentation added --- docs/api/registry.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'docs') diff --git a/docs/api/registry.rst b/docs/api/registry.rst index bab3e26ba..57a80b3f5 100644 --- a/docs/api/registry.rst +++ b/docs/api/registry.rst @@ -14,6 +14,18 @@ accessed as ``request.registry.settings`` or ``config.registry.settings`` in a typical Pyramid application. + .. attribute:: package_name + + .. versionadded:: 1.6 + + When a registry is set up (or created) by a :term:`Configurator`, this + attribute will be the shortcut for + :attr:`pyramid.config.Configurator.package_name`. + + This attribute is often accessed as ``request.registry.package_name`` or + ``config.registry.package_name`` or ``config.package_name`` + in a typical Pyramid application. + .. attribute:: introspector .. versionadded:: 1.3 -- cgit v1.2.3 From 138706a24bd8e7051c60942c2789d8c16b4ca2ed Mon Sep 17 00:00:00 2001 From: Matt Russell Date: Wed, 19 Nov 2014 23:06:17 +0000 Subject: Include code examples for integration and functional tests in docs #1001 Wrap lines as per convention. --- docs/narr/MyProject/myproject/tests.py | 37 +++++++++ docs/narr/MyProject/setup.py | 45 +++++++---- docs/narr/testing.rst | 142 +++++++++++++++------------------ 3 files changed, 131 insertions(+), 93 deletions(-) (limited to 'docs') diff --git a/docs/narr/MyProject/myproject/tests.py b/docs/narr/MyProject/myproject/tests.py index 64dcab1d5..8c60407e5 100644 --- a/docs/narr/MyProject/myproject/tests.py +++ b/docs/narr/MyProject/myproject/tests.py @@ -15,3 +15,40 @@ class ViewTests(unittest.TestCase): request = testing.DummyRequest() info = my_view(request) self.assertEqual(info['project'], 'MyProject') + +class ViewIntegrationTests(unittest.TestCase): + def setUp(self): + """ This sets up the application registry with the + registrations your application declares in its ``includeme`` + function. + """ + self.config = testing.setUp() + self.config.include('myproject') + + def tearDown(self): + """ Clear out the application registry """ + testing.tearDown() + + def test_my_view(self): + from myproject.views import my_view + request = testing.DummyRequest() + result = my_view(request) + self.assertEqual(result.status, '200 OK') + body = result.app_iter[0] + self.assertTrue('Welcome to' in body) + self.assertEqual(len(result.headerlist), 2) + self.assertEqual(result.headerlist[0], + ('Content-Type', 'text/html; charset=UTF-8')) + self.assertEqual(result.headerlist[1], ('Content-Length', + str(len(body)))) + +class FunctionalTests(unittest.TestCase): + def setUp(self): + from myproject import main + app = main({}) + from webtest import TestApp + self.testapp = TestApp(app) + + def test_root(self): + res = self.testapp.get('/', status=200) + self.assertTrue('Pyramid' in res.body) diff --git a/docs/narr/MyProject/setup.py b/docs/narr/MyProject/setup.py index 8c019af51..9f34540a7 100644 --- a/docs/narr/MyProject/setup.py +++ b/docs/narr/MyProject/setup.py @@ -1,30 +1,42 @@ -import os +"""Setup for the MyProject package. +""" +import os from setuptools import setup, find_packages -here = os.path.abspath(os.path.dirname(__file__)) -with open(os.path.join(here, 'README.txt')) as f: - README = f.read() -with open(os.path.join(here, 'CHANGES.txt')) as f: - CHANGES = f.read() -requires = [ +HERE = os.path.abspath(os.path.dirname(__file__)) + + +with open(os.path.join(HERE, 'README.txt')) as fp: + README = fp.read() + + +with open(os.path.join(HERE, 'CHANGES.txt')) as fp: + CHANGES = fp.read() + + +REQUIRES = [ 'pyramid', 'pyramid_chameleon', 'pyramid_debugtoolbar', 'waitress', ] +TESTS_REQUIRE = [ + 'webtest' + ] + setup(name='MyProject', version='0.0', description='MyProject', long_description=README + '\n\n' + CHANGES, classifiers=[ - "Programming Language :: Python", - "Framework :: Pyramid", - "Topic :: Internet :: WWW/HTTP", - "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", - ], + 'Programming Language :: Python', + 'Framework :: Pyramid', + 'Topic :: Internet :: WWW/HTTP', + 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', + ], author='', author_email='', url='', @@ -32,11 +44,10 @@ setup(name='MyProject', packages=find_packages(), include_package_data=True, zip_safe=False, - install_requires=requires, - tests_require=requires, - test_suite="myproject", + install_requires=REQUIRES, + tests_require=TESTS_REQUIRE, + test_suite='myproject', entry_points="""\ [paste.app_factory] main = myproject:main - """, - ) + """) diff --git a/docs/narr/testing.rst b/docs/narr/testing.rst index e001ad81c..3620f5e11 100644 --- a/docs/narr/testing.rst +++ b/docs/narr/testing.rst @@ -128,8 +128,9 @@ functions accepts various arguments that influence the environment of the test. See the :ref:`testing_module` API for information about the extra arguments supported by these functions. -If you also want to make :func:`~pyramid.threadlocal.get_current_request` return something -other than ``None`` during the course of a single test, you can pass a +If you also want to make :func:`~pyramid.threadlocal.get_current_request` +return something other than ``None`` during the course of a single test, you +can pass a :term:`request` object into the :func:`pyramid.testing.setUp` within the ``setUp`` method of your test: @@ -333,66 +334,49 @@ Creating Integration Tests -------------------------- In :app:`Pyramid`, a *unit test* typically relies on "mock" or "dummy" -implementations to give the code under test only enough context to run. +implementations to give the code under test enough context to run. "Integration testing" implies another sort of testing. In the context of a -:app:`Pyramid` integration test, the test logic tests the functionality of -some code *and* its integration with the rest of the :app:`Pyramid` +:app:`Pyramid` integration test, the test logic exercises the functionality of +the code under test *and* its integration with the rest of the :app:`Pyramid` framework. -In :app:`Pyramid` applications that are plugins to Pyramid, you can create an -integration test by including its ``includeme`` function via -:meth:`pyramid.config.Configurator.include` in the test's setup code. This -causes the entire :app:`Pyramid` environment to be set up and torn down as if -your application was running "for real". This is a heavy-hammer way of -making sure that your tests have enough context to run properly, and it tests -your code's integration with the rest of :app:`Pyramid`. +Creating an integration test for a :app:`Pyramid` application usually means +invoking the application's ``includeme`` function via +:meth:`pyramid.config.Configurator.include` within the test's setup code. This +causes the entire :app:`Pyramid` environment to be set up, simulating what +happens when your application is run "for real". This is a heavy-hammer way of +making sure that your tests have enough context to run properly, and tests your +code's integration with the rest of :app:`Pyramid`. -Let's demonstrate this by showing an integration test for a view. The below -test assumes that your application's package name is ``myapp``, and that -there is a ``views`` module in the app with a function with the name -``my_view`` in it that returns the response 'Welcome to this application' -after accessing some values that require a fully set up environment. +.. seealso:: -.. code-block:: python - :linenos: + See more information about :app:`Pyramid`'s ``includme`` function. - import unittest +Let's demonstrate this by showing an integration test for a view. - from pyramid import testing +Given the following view definition, which assumes that your application's +:term:`package` name is ``myproject``, and within that :term:`package` there +exists a module ``views``, which in turn contains a :term:`view` function named +``my_view``: - class ViewIntegrationTests(unittest.TestCase): - def setUp(self): - """ This sets up the application registry with the - registrations your application declares in its ``includeme`` - function. - """ - import myapp - self.config = testing.setUp() - self.config.include('myapp') + .. literalinclude:: MyProject/myproject/views.py + :linenos: + :lines: 1-6 + :language: python - def tearDown(self): - """ Clear out the application registry """ - testing.tearDown() +You'd then create a ``tests`` module within your ``myproject`` package, +containing the following test code: - def test_my_view(self): - from myapp.views import my_view - request = testing.DummyRequest() - result = my_view(request) - self.assertEqual(result.status, '200 OK') - body = result.app_iter[0] - self.assertTrue('Welcome to' in body) - self.assertEqual(len(result.headerlist), 2) - self.assertEqual(result.headerlist[0], - ('Content-Type', 'text/html; charset=UTF-8')) - self.assertEqual(result.headerlist[1], ('Content-Length', - str(len(body)))) - -Unless you cannot avoid it, you should prefer writing unit tests that use the -:class:`~pyramid.config.Configurator` API to set up the right "mock" -registrations rather than creating an integration test. Unit tests will run -faster (because they do less for each test) and the result of a unit test is -usually easier to make assertions about. + .. literalinclude:: MyProject/myproject/tests.py + :linenos: + :pyobject: ViewIntegrationTests + :language: python + +Writing unit tests that use the :class:`~pyramid.config.Configurator` API to +set up the right "mock" registrations is often preferred to creating +integration tests. Unit tests will run faster (because they do less for each +test) and are usually easier to reason about. .. index:: single: functional tests @@ -404,34 +388,40 @@ Creating Functional Tests Functional tests test your literal application. -The below test assumes that your application's package name is ``myapp``, and -that there is a view that returns an HTML body when the root URL is invoked. -It further assumes that you've added a ``tests_require`` dependency on the -``WebTest`` package within your ``setup.py`` file. :term:`WebTest` is a -functional testing package written by Ian Bicking. +In Pyramid, functional tests are typically written using the :term:`WebTest` +package, which provides APIs for invoking HTTP(S) requests to your application. -.. code-block:: python - :linenos: +Regardless of which testing :term:`package` you use, ensure to add a +``tests_require`` dependency on that package to to your application's +``setup.py`` file: - import unittest + .. literalinclude:: MyProject/setup.py + :linenos: + :emphasize-lines: 26-28,48 + :language: python - class FunctionalTests(unittest.TestCase): - def setUp(self): - from myapp import main - app = main({}) - from webtest import TestApp - self.testapp = TestApp(app) - - def test_root(self): - res = self.testapp.get('/', status=200) - self.assertTrue('Pyramid' in res.body) - -When this test is run, each test creates a "real" WSGI application using the -``main`` function in your ``myapp.__init__`` module and uses :term:`WebTest` -to wrap that WSGI application. It assigns the result to ``self.testapp``. -In the test named ``test_root``, we use the testapp's ``get`` method to -invoke the root URL. We then assert that the returned HTML has the string -``Pyramid`` in it. +Assuming your :term:`package` is named ``myproject``, which contains a +``views`` module, which in turn contains a :term:`view` function ``my_view`` +that returns a HTML body when the root URL is invoked: + + .. literalinclude:: MyProject/myproject/views.py + :linenos: + :language: python + +Then the following example functional test (shown below) demonstrates invoking +the :term:`view` shown above: + + .. literalinclude:: MyProject/myproject/tests.py + :linenos: + :pyobject: FunctionalTests + :language: python + +When this test is run, each test method creates a "real" :term:`WSGI` +application using the ``main`` function in your ``myproject.__init__`` module, +using :term:`WebTest` to wrap that WSGI application. It assigns the result to +``self.testapp``. In the test named ``test_root``. The ``TestApp``'s ``get`` +method is used to invoke the root URL. Finally, an assertion is made that the +returned HTML contains the text ``MyProject``. See the :term:`WebTest` documentation for further information about the methods available to a :class:`webtest.app.TestApp` instance. -- cgit v1.2.3 From 9c94e129f1bbb753317deba7ea5f790db13e0709 Mon Sep 17 00:00:00 2001 From: Matt Russell Date: Tue, 25 Nov 2014 20:59:18 +0000 Subject: Tweak seealso for the includeme function. --- docs/narr/testing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/testing.rst b/docs/narr/testing.rst index 3620f5e11..ecda57489 100644 --- a/docs/narr/testing.rst +++ b/docs/narr/testing.rst @@ -351,7 +351,7 @@ code's integration with the rest of :app:`Pyramid`. .. seealso:: - See more information about :app:`Pyramid`'s ``includme`` function. + See also :ref:`including_configuration` Let's demonstrate this by showing an integration test for a view. -- cgit v1.2.3 From 3408269bd291b771efef8e54f039038fc5b59a26 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Mon, 1 Dec 2014 13:40:39 -0800 Subject: - rename pyramid_router.svg to pyramid_request_processing.svg to be consistent with its content - add source files for future modifications --- docs/_static/pyramid_request_processing.graffle | 9748 +++++++++++++++++++++++ docs/_static/pyramid_request_processing.png | Bin 0 -> 122854 bytes docs/_static/pyramid_request_processing.svg | 3 + docs/_static/pyramid_router.svg | 3 - docs/narr/router.rst | 2 +- 5 files changed, 9752 insertions(+), 4 deletions(-) create mode 100644 docs/_static/pyramid_request_processing.graffle create mode 100644 docs/_static/pyramid_request_processing.png create mode 100644 docs/_static/pyramid_request_processing.svg delete mode 100644 docs/_static/pyramid_router.svg (limited to 'docs') diff --git a/docs/_static/pyramid_request_processing.graffle b/docs/_static/pyramid_request_processing.graffle new file mode 100644 index 000000000..71319610b --- /dev/null +++ b/docs/_static/pyramid_request_processing.graffle @@ -0,0 +1,9748 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGrafflePro + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {576, 733}} + Class + SolidGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2014-11-18 08:33:33 +0000 + Creator + Steve Piercy + DisplayScale + 1 0/72 in = 1 0/72 in + GraphDocumentVersion + 8 + GraphicsList + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169389 + + ID + 169504 + Layer + 0 + Points + + {344.41667175292969, 402.88506673894034} + {375.5, 402.27232108797347} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169428 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169382 + + ID + 169433 + Layer + 0 + Points + + {155.00000254313238, 459.27667544230695} + {238.5002713470962, 456.52468399152298} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169370 + Position + 0.28820157051086426 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169383 + + ID + 169432 + Layer + 0 + Points + + {155.00000254313238, 482.12574895537085} + {238.52297468463752, 508.35839132916635} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169370 + Position + 0.5668826699256897 + + + + Class + Group + Graphics + + + Bounds + {{238.8333613077798, 284.99999999999994}, {105.66668701171875, 18.656048080136394}} + Class + ShapedGraphic + ID + 169425 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, -0.49999999999999645} + {-0.49526813868737474, -0.4689979626999552} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 authorization} + VerticalPad + 0 + + + + Bounds + {{238.75000762939453, 412.15071036499205}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169426 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, 0.5} + {-0.49999999999999911, 0.49999999999999289} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 decorators egress} + VerticalPad + 0 + + + + Bounds + {{238.75000762939453, 303.65604172230951}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169427 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, -0.49999999999999645} + {-0.49526813868737474, -0.4689979626999552} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 decorators ingress} + VerticalPad + 0 + + + + Bounds + {{238.75000762939453, 393.55704269887212}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169428 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 response adapter} + VerticalPad + 0 + + + + Bounds + {{238.75000762939453, 374.90099016834085}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169429 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view mapper egress} + VerticalPad + 0 + + + + Bounds + {{238.75000762939453, 341.36561209044055}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169430 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view} + VerticalPad + 0 + + + + Bounds + {{238.75000762939453, 322.26348241170439}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169431 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view mapper ingress} + VerticalPad + 0 + + + + ID + 169424 + Layer + 0 + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169422 + Info + 4 + + ID + 169423 + Layer + 0 + Points + + {155.00000254313238, 470.25295298442387} + {238.33861159880226, 482.4262543949045} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169370 + Position + 0.42701038718223572 + + + + Bounds + {{238.83336130777977, 471.22620192028251}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169422 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 NewResponse} + VerticalPad + 0 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169420 + Info + 4 + + ID + 169421 + Layer + 0 + Points + + {154.99998733539806, 128.68025330008533} + {239.83340199788393, 128.59152244387357} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169386 + Position + 0.35945424437522888 + + + + Bounds + {{239.83340199788395, 117.31920169649808}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169420 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 NewRequest} + VerticalPad + 0 + + + + Class + TableGroup + Graphics + + + Bounds + {{102.1666056315114, 148.28868579864499}, {105.66669464111328, 33.08929443359375}} + Class + ShapedGraphic + ID + 169418 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 URL dispatch} + VerticalPad + 0 + + + + Bounds + {{102.1666056315114, 181.37798023223874}, {105.66669464111328, 17.244049072265625}} + Class + ShapedGraphic + ID + 169419 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 route predicates} + VerticalPad + 0 + + + + GridH + + 169418 + 169419 + + + ID + 169417 + Layer + 0 + + + Class + TableGroup + Graphics + + + Bounds + {{102.16666158040482, 272}, {105.66666412353516, 33.08929443359375}} + Class + ShapedGraphic + ID + 169412 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view lookup} + VerticalPad + 0 + + + + Bounds + {{102.16666158040482, 305.08929443359375}, {105.66666412353516, 17.244049072265625}} + Class + ShapedGraphic + ID + 169413 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 predicates} + VerticalPad + 0 + + + + GridH + + 169412 + 169413 + + + ID + 169411 + Layer + 0 + + + Class + LineGraphic + Head + + ID + 169407 + Info + 7 + + ID + 169410 + Layer + 0 + Points + + {238.75000762939462, 430.80675844512831} + {207.66666666666765, 385.656005859375} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169426 + Info + 6 + + + + Class + LineGraphic + Head + + ID + 169407 + Info + 8 + + ID + 169409 + Layer + 0 + Points + + {239.33336141608385, 285.57837549845181} + {207.66666666666777, 353.07514659563753} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169425 + Info + 6 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -8.9999999999999432} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169381 + + ID + 169408 + Layer + 0 + Points + + {155.00000254313238, 386.66442959065108} + {155.00000254313238, 422.21209462483216} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169407 + + + + Bounds + {{102.16667048136482, 353.07514659563753}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169407 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {-0.49211360058019871, -0.49251945318722434} + {-0.49211360058019871, 0.49470854679786669} + {0.4984227008620481, 0.48463479169597612} + {0.49842270086204898, -0.5} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view pipeline} + VerticalPad + 0 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169380 + Info + 4 + + ID + 169399 + Layer + 0 + Points + + {154.9999936421724, 258.44082431579938} + {238.8333613077798, 258.45536063967575} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169372 + Position + 0.51973581314086914 + + + + Class + Group + Graphics + + + Bounds + {{383.66662216186666, 130.51770718892479}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169393 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 internal process} + VerticalPad + 0 + + + + Bounds + {{383.66662216186666, 91.940789540609359}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169394 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 external process (middleware, tween)} + VerticalPad + 0 + + + + Bounds + {{383.66662216186666, 158.54998334248924}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169395 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view} + VerticalPad + 0 + + + + Bounds + {{383.66662216186666, 186.58225949605369}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169396 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 callback} + VerticalPad + 0 + + + + Bounds + {{383.66662216186666, 63.908513387045019}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169397 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 event} + VerticalPad + 0 + + + + Bounds + {{370.9999504089372, 42.910746256511771}, {132.66667175292969, 184.08924865722656}} + Class + ShapedGraphic + ID + 169398 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + CornerRadius + 5 + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs20 \cf0 Legend} + VerticalPad + 0 + + TextPlacement + 0 + + + ID + 169391 + Layer + 0 + + + Bounds + {{233.5000012715667, 20.000000000000934}, {116, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 169390 + Layer + 0 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\b\fs24 \cf0 <%Canvas%>} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{375.5, 391}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169389 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 BeforeRender} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 7.05596923828125} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169418 + Info + 2 + + ID + 169386 + Layer + 0 + Points + + {155.00000170434049, 119.22767858295661} + {154.99995295206804, 148.28868579864499} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169378 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169378 + + ID + 169385 + Layer + 0 + Points + + {155.00000254313238, 67.727678571434836} + {155.00000254313238, 96.18303707668386} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169377 + Info + 1 + + + + Bounds + {{102.16667048136482, 509.6179466247504}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169384 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 middleware egress} + VerticalPad + 0 + + + + Bounds + {{239, 497.23589324949899}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169383 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 finished callbacks} + VerticalPad + 0 + + + + Bounds + {{239, 445.23589324949717}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169382 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 response callbacks} + VerticalPad + 0 + + + + Bounds + {{102.16667048136482, 422.21209462483216}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169381 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 tween egress} + VerticalPad + 0 + + + + Bounds + {{238.83336130777977, 247.18303989230026}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169380 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 ContextFound} + VerticalPad + 0 + + + + Bounds + {{102.16667048136482, 222.18303707668389}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169379 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 traversal} + VerticalPad + 0 + + + + Bounds + {{102.16667048136482, 96.18303707668386}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169378 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 tween ingress} + VerticalPad + 0 + + + + Bounds + {{102.16667048136482, 45.18303707668386}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169377 + Layer + 0 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 middleware ingress } + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169379 + + ID + 169373 + Layer + 0 + Points + + {154.99995295206804, 198.62202930450437} + {155.00000254313238, 222.18303707668389} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169419 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 7.05596923828125} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169412 + Info + 2 + + ID + 169372 + Layer + 0 + Points + + {154.9999936421724, 245.22767856643924} + {154.9999936421724, 272} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169379 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -8.9999999999999432} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169407 + + ID + 169371 + Layer + 0 + Points + + {154.9999936421724, 322.33334350585938} + {155.00000254313238, 353.07514659563753} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169413 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9839935302734375} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169384 + Info + 2 + + ID + 169370 + Layer + 0 + Points + + {155.00000254313238, 444.75673611958314} + {155.00000254313238, 509.6179466247504} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169381 + + + + Class + LineGraphic + Head + + ID + 169444 + Info + 6 + + ID + 169503 + Layer + 1 + Points + + {272.4166717529298, 537.32234122436705} + {420.4999504089364, 515.08928491955714} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169494 + Info + 5 + + + + Class + LineGraphic + Head + + ID + 169444 + + ID + 169502 + Layer + 1 + Points + + {272.50004831949906, 391.51558277923863} + {420.4999504089364, 472.78869058972316} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169493 + Info + 5 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169450 + + ID + 169501 + Layer + 1 + Points + + {83.000002543132396, 592.81693102013151} + {239, 583.78422005970799} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169438 + Position + 0.28820157051086426 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169451 + + ID + 169500 + Layer + 1 + Points + + {83.000002543132396, 629.80996162681686} + {239, 640.78422005970981} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169438 + Position + 0.5668826699256897 + + + + Class + Group + Graphics + + + Bounds + {{166.8333613077798, 391.51558277923863}, {105.66668701171875, 18.656048080136394}} + Class + ShapedGraphic + ID + 169493 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, -0.49999999999999645} + {-0.49526813868737474, -0.4689979626999552} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 authorization} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 518.66629314423074}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169494 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, 0.5} + {-0.49999999999999911, 0.49999999999999289} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 decorators egress} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 410.17162450154819}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169495 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, -0.49999999999999645} + {-0.49526813868737474, -0.4689979626999552} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 decorators ingress} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 500.07262547811081}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169496 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 response adapter} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 481.41657294757954}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169497 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view mapper egress} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 447.88119486967923}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169498 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 428.77906519094307}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169499 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view mapper ingress} + VerticalPad + 0 + + + + ID + 169492 + Layer + 1 + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169490 + Info + 4 + + ID + 169491 + Layer + 1 + Points + + {83.166643778483959, 611.77452873049333} + {238.8333613077798, 611.77452873049333} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + + + Bounds + {{238.83336130777977, 600.50220798311784}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169490 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 NewResponse} + VerticalPad + 0 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169488 + Info + 4 + + ID + 169489 + Layer + 1 + Points + + {82.999986314263907, 140.3328574622312} + {239.83340199788393, 141.59152244387357} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169454 + Position + 0.35945424437522888 + + + + Bounds + {{239.83340199788395, 130.31920169649808}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169488 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 NewRequest} + VerticalPad + 0 + + + + Class + TableGroup + Graphics + + + Bounds + {{30.166605631511416, 166.28868579864499}, {105.66668701171875, 33.08929443359375}} + Class + ShapedGraphic + ID + 169486 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 URL dispatch} + VerticalPad + 0 + + + + Bounds + {{30.166605631511416, 199.37798023223874}, {105.66668701171875, 17.244049072265625}} + Class + ShapedGraphic + ID + 169487 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 route predicates} + VerticalPad + 0 + + + + GridH + + 169486 + 169487 + + + ID + 169485 + Layer + 1 + + + Class + TableGroup + Graphics + + + Bounds + {{420.5000406901047, 338.15028762817326}, {105.66668701171875, 33.08929443359375}} + Class + ShapedGraphic + ID + 169483 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view lookup} + VerticalPad + 0 + + + + Bounds + {{420.5000406901047, 371.23958206176701}, {105.66668701171875, 17.244049072265625}} + Class + ShapedGraphic + ID + 169484 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 predicates} + VerticalPad + 0 + + + + GridH + + 169483 + 169484 + + + ID + 169482 + Layer + 1 + + + Class + TableGroup + Graphics + + + Bounds + {{30.166661580404835, 335}, {105.66667175292969, 33.08929443359375}} + Class + ShapedGraphic + ID + 169480 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view lookup} + VerticalPad + 0 + + + + Bounds + {{30.166661580404835, 368.08929443359375}, {105.66667175292969, 17.244049072265625}} + Class + ShapedGraphic + ID + 169481 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 predicates} + VerticalPad + 0 + + + + GridH + + 169480 + 169481 + + + ID + 169479 + Layer + 1 + + + Class + LineGraphic + Head + + ID + 169475 + Info + 7 + + ID + 169478 + Layer + 1 + Points + + {166.75000762939462, 537.32234122436694} + {135.66666666666765, 485} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169494 + Info + 6 + + + + Class + LineGraphic + Head + + ID + 169475 + Info + 8 + + ID + 169477 + Layer + 1 + Points + + {167.33336141608385, 392.09395827769049} + {135.66666666666777, 452.41914073626253} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169493 + Info + 6 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -8.9999999999999432} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169449 + + ID + 169476 + Layer + 1 + Points + + {83.000002543132396, 485.50842372576449} + {83.000002543132396, 548.10604731241608} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169475 + + + + Bounds + {{30.166670481364818, 452.41914073626253}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169475 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {-0.49211360058019871, -0.49251945318722434} + {-0.49211360058019871, 0.49470854679786669} + {0.4984227008620481, 0.48463479169597612} + {0.49842270086204898, -0.5} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view pipeline} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {51.333333333333314, 0} + {-0.66666666666662877, 58.666666666666686} + {0.66673293066804717, -58.666850540458825} + {-16.306719354194399, 0.26652623861849634} + + Head + + ID + 169443 + Info + 4 + + ID + 169474 + Layer + 1 + Points + + {369.66666666666669, 541} + {404.00000000000023, 362} + {420.36749776329049, 302.42112495959606} + + Style + + stroke + + Bezier + + Color + + b + 0.75663 + g + 0.756618 + r + 0.75664 + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + + + Class + LineGraphic + ControlPoints + + {69.833333333332462, -0.72767857143483639} + {-0.66690523835279691, -51.044605218028948} + {0.66666666666674246, 51.044637362162291} + {-24.333271383961971, -0.13425428344572765} + + Head + + ID + 169443 + Info + 4 + + ID + 169473 + Layer + 1 + Points + + {310.66666666666754, 118.72767857143484} + {399.33333333333417, 216.62202930450439} + {420.37955338188368, 301.45369961823752} + + Style + + stroke + + Bezier + + Color + + b + 0.75663 + g + 0.756618 + r + 0.75664 + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + + + Class + LineGraphic + ControlPoints + + {-3.9999491373696401, 78.910715080442856} + {92.666683130060392, 0.22547126950667007} + + Head + + ID + 169490 + Info + 3 + + ID + 169472 + Layer + 1 + Points + + {473.33328247070392, 515.08928491955714} + {344.50002543131501, 611.77452873049333} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169444 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {31.999987284342428, -14.081351280212308} + {-32.166667938232536, 10.244050343831077} + + ID + 169471 + Layer + 1 + Points + + {344.96346869509995, 346.26317428240412} + {389.8333346048999, 328.08928298950207} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169456 + Info + 3 + + + + Class + LineGraphic + ControlPoints + + {31.999987284342428, -14.081351280212308} + {-28.500001271565793, 8.3333333333333144} + + ID + 169470 + Layer + 1 + Points + + {344.98861594084059, 323.71068461220347} + {391.1666679382335, 313.6666666666664} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169455 + + + + Class + LineGraphic + ControlPoints + + {31.999987284342428, -14.081351280212308} + {-40, 1.5446373167492311} + + ID + 169469 + Layer + 1 + Points + + {344.9995533451783, 301.1612218744512} + {394.50000127156665, 299.00000000000045} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169442 + Info + 3 + + + + Class + LineGraphic + ControlPoints + + {8.5833282470703125, -10.244596987647753} + {0, 0} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169457 + Info + 4 + + ID + 169468 + Layer + 1 + Points + + {272.41667175292969, 509.40064951817902} + {285.5, 503.81699882234847} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + Tail + + ID + 169496 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169448 + Info + 4 + + ID + 169467 + Layer + 1 + Points + + {82.999997456869679, 300.27229985501288} + {238.34892458824362, 260.57913893040109} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169440 + Position + 0.51973581314086914 + + + + Class + Group + Graphics + + + Bounds + {{419.66662216186666, 214.61452811107179}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169460 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.756045 + g + 0.75004 + r + 0.994455 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 exception} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 130.51770718892479}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169461 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 internal process} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 91.940789540609359}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169462 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 external process (middleware, tween)} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 158.54998334248924}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169463 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 186.58225949605369}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169464 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 callback} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 63.908513387045019}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169465 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 event} + VerticalPad + 0 + + + + Bounds + {{406.9999504089372, 42.910746256511771}, {132.66667175292969, 207.81692504882812}} + Class + ShapedGraphic + ID + 169466 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + CornerRadius + 5 + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs20 \cf0 Legend} + VerticalPad + 0 + + TextPlacement + 0 + + + ID + 169459 + Layer + 1 + + + Bounds + {{233.5000012715667, 20.000000000000934}, {116, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 169458 + Layer + 1 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\b\fs24 \cf0 <%Canvas%>} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{285.5, 492.544677734375}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169457 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 BeforeRender} + VerticalPad + 0 + + + + Bounds + {{238.83337529500417, 335.17855853126167}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169456 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 HTTPForbidden} + VerticalPad + 0 + + + + Bounds + {{238.83337529500417, 312.54463200342093}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169455 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 PredicateMismatch} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 7.05596923828125} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169486 + Info + 2 + + ID + 169454 + Layer + 1 + Points + + {83.000001850648417, 128.2276785555359} + {82.999949137370791, 166.28868579864502} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169446 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169446 + + ID + 169453 + Layer + 1 + Points + + {83.000002543132396, 67.727678571434836} + {83.000002543132396, 105.18303707668386} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169445 + Info + 1 + + + + Bounds + {{30.166670481364818, 671.51189931233432}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169452 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 middleware egress} + VerticalPad + 0 + + + + Bounds + {{239, 629.51189931233432}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169451 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 finished callbacks} + VerticalPad + 0 + + + + Bounds + {{239, 572.5118993123325}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169450 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 response callbacks} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 548.10604731241608}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169449 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 tween egress} + VerticalPad + 0 + + + + Bounds + {{238.83336130777977, 249.18303989230026}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169448 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 ContextFound} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 240.18303707668389}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169447 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 traversal} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 105.18303707668386}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169446 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 tween ingress} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 45.18303707668386}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169445 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 middleware ingress } + VerticalPad + 0 + + + + Bounds + {{420.49995040893634, 472.78869058972316}, {105.66666412353516, 42.300594329833984}} + Class + ShapedGraphic + ID + 169444 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {-0.49999999999999956, -0.5} + {-0.49999999999999956, 0.5} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 notfound_view / forbidden_view / exception_view} + VerticalPad + 0 + + + + Bounds + {{420.49995040893634, 290.66666666666691}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169443 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.756045 + g + 0.75004 + r + 0.994455 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 exception} + VerticalPad + 0 + + + + Bounds + {{238.83336512247806, 289.91071033477789}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169442 + Layer + 1 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 HTTPNotFound} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169447 + + ID + 169441 + Layer + 1 + Points + + {82.999949137370791, 216.62202930450437} + {83.000002543132396, 240.18303707668389} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169487 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 7.05596923828125} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169480 + Info + 2 + + ID + 169440 + Layer + 1 + Points + + {82.999997456869679, 263.22767855635425} + {82.999997456869679, 335} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169447 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -8.9999999999999432} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169475 + + ID + 169439 + Layer + 1 + Points + + {82.999997456869679, 385.33334350585938} + {83.000002543132396, 452.41914073626253} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169481 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9839935302734375} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169452 + Info + 2 + + ID + 169438 + Layer + 1 + Points + + {83.000002543132396, 571.15068879140836} + {83.000002543132396, 671.51189931233421} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169449 + + + + Class + LineGraphic + ControlPoints + + {0, 7.055999755859375} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169483 + Info + 2 + + ID + 169437 + Layer + 1 + Points + + {473.33328247070392, 313.2113088426139} + {473.33338419596407, 338.15028762817326} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169443 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840011596679688} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169444 + + ID + 169436 + Layer + 1 + Points + + {473.33338359264764, 388.98363112285512} + {473.33328247070392, 472.78869058972316} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169484 + + + + Class + LineGraphic + Head + + ID + 169358 + Info + 6 + + ID + 169359 + Layer + 2 + Points + + {272.4166717529298, 537.32234122436705} + {420.4999504089364, 515.08928491955714} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169206 + Info + 5 + + + + Class + LineGraphic + Head + + ID + 169358 + + ID + 169360 + Layer + 2 + Points + + {272.50004831949906, 391.51558277923863} + {420.4999504089364, 472.78869058972316} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169205 + Info + 5 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169044 + + ID + 169130 + Layer + 2 + Points + + {83.000002543132396, 592.81693102013151} + {239, 583.78422005970799} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169128 + Position + 0.28820157051086426 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169045 + + ID + 169129 + Layer + 2 + Points + + {83.000002543132396, 629.80996162681686} + {239, 640.78422005970981} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169128 + Position + 0.5668826699256897 + + + + Class + Group + Graphics + + + Bounds + {{166.8333613077798, 391.51558277923863}, {105.66668701171875, 18.656048080136394}} + Class + ShapedGraphic + ID + 169205 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, -0.49999999999999645} + {-0.49526813868737474, -0.4689979626999552} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 authorization} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 518.66629314423074}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169206 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, 0.5} + {-0.49999999999999911, 0.49999999999999289} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 decorators egress} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 410.17162450154819}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169207 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {0.50000000000000089, -0.49999999999999645} + {-0.49526813868737474, -0.4689979626999552} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 decorators ingress} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 500.07262547811081}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169208 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 response adapter} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 481.41657294757954}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169209 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view mapper egress} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 447.88119486967923}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169210 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view} + VerticalPad + 0 + + + + Bounds + {{166.75000762939453, 428.77906519094307}, {105.66666412353516, 18.656048080136394}} + Class + ShapedGraphic + ID + 169211 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.637876 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view mapper ingress} + VerticalPad + 0 + + + + ID + 169204 + Layer + 2 + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169085 + Info + 4 + + ID + 169086 + Layer + 2 + Points + + {83.166643778483959, 611.77452873049333} + {238.8333613077798, 611.77452873049333} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + + + Bounds + {{238.83336130777977, 600.50220798311784}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169085 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 NewResponse} + VerticalPad + 0 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169083 + Info + 4 + + ID + 169084 + Layer + 2 + Points + + {82.999986314263907, 140.3328574622312} + {239.83340199788393, 141.59152244387357} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169048 + Position + 0.35945424437522888 + + + + Bounds + {{239.83340199788395, 130.31920169649808}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169083 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 NewRequest} + VerticalPad + 0 + + + + Class + TableGroup + Graphics + + + Bounds + {{30.166605631511416, 166.28868579864499}, {105.66668701171875, 33.08929443359375}} + Class + ShapedGraphic + ID + 169081 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 URL dispatch} + VerticalPad + 0 + + + + Bounds + {{30.166605631511416, 199.37798023223874}, {105.66668701171875, 17.244049072265625}} + Class + ShapedGraphic + ID + 169082 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 route predicates} + VerticalPad + 0 + + + + GridH + + 169081 + 169082 + + + ID + 169080 + Layer + 2 + + + Class + TableGroup + Graphics + + + Bounds + {{420.5000406901047, 338.15028762817326}, {105.66668701171875, 33.08929443359375}} + Class + ShapedGraphic + ID + 169355 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view lookup} + VerticalPad + 0 + + + + Bounds + {{420.5000406901047, 371.23958206176701}, {105.66668701171875, 17.244049072265625}} + Class + ShapedGraphic + ID + 169356 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 predicates} + VerticalPad + 0 + + + + GridH + + 169355 + 169356 + + + ID + 169354 + Layer + 2 + + + Class + TableGroup + Graphics + + + Bounds + {{30.166661580404835, 335}, {105.66667175292969, 33.08929443359375}} + Class + ShapedGraphic + ID + 169075 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view lookup} + VerticalPad + 0 + + + + Bounds + {{30.166661580404835, 368.08929443359375}, {105.66667175292969, 17.244049072265625}} + Class + ShapedGraphic + ID + 169076 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 predicates} + VerticalPad + 0 + + + + GridH + + 169075 + 169076 + + + ID + 169074 + Layer + 2 + + + Class + LineGraphic + Head + + ID + 169070 + Info + 7 + + ID + 169073 + Layer + 2 + Points + + {166.75000762939462, 537.32234122436694} + {135.66666666666765, 485} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169206 + Info + 6 + + + + Class + LineGraphic + Head + + ID + 169070 + Info + 8 + + ID + 169072 + Layer + 2 + Points + + {167.33336141608385, 392.09395827769049} + {135.66666666666777, 452.41914073626253} + + Style + + stroke + + Color + + b + 0.755269 + g + 0.755239 + r + 0.75529 + + HeadArrow + 0 + Legacy + + Pattern + 11 + TailArrow + 0 + + + Tail + + ID + 169205 + Info + 6 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -8.9999999999999432} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169043 + + ID + 169071 + Layer + 2 + Points + + {83.000002543132396, 485.50842372576449} + {83.000002543132396, 548.10604731241608} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169070 + + + + Bounds + {{30.166670481364818, 452.41914073626253}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169070 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {-0.49211360058019871, -0.49251945318722434} + {-0.49211360058019871, 0.49470854679786669} + {0.4984227008620481, 0.48463479169597612} + {0.49842270086204898, -0.5} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view pipeline} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {51.333333333333314, 0} + {-0.66666666666662877, 58.666666666666686} + {0.66673293066804717, -58.666850540458825} + {-16.306719354194399, 0.26652623861849634} + + Head + + ID + 169344 + Info + 4 + + ID + 169345 + Layer + 2 + Points + + {369.66666666666669, 541} + {404.00000000000023, 362} + {420.36749776329049, 302.42112495959606} + + Style + + stroke + + Bezier + + Color + + b + 0.75663 + g + 0.756618 + r + 0.75664 + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + + + Class + LineGraphic + ControlPoints + + {69.833333333332462, -0.72767857143483639} + {-0.66690523835279691, -51.044605218028948} + {0.66666666666674246, 51.044637362162291} + {-24.333271383961971, -0.13425428344572765} + + Head + + ID + 169344 + Info + 4 + + ID + 169346 + Layer + 2 + Points + + {310.66666666666754, 118.72767857143484} + {399.33333333333417, 216.62202930450439} + {420.37955338188368, 301.45369961823752} + + Style + + stroke + + Bezier + + Color + + b + 0.75663 + g + 0.756618 + r + 0.75664 + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + + + Class + LineGraphic + ControlPoints + + {-3.9999491373696401, 78.910715080442856} + {92.666683130060392, 0.22547126950667007} + + Head + + ID + 169085 + Info + 3 + + ID + 169361 + Layer + 2 + Points + + {473.33328247070392, 515.08928491955714} + {344.50002543131501, 611.77452873049333} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169358 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {31.999987284342428, -14.081351280212308} + {-32.166667938232536, 10.244050343831077} + + ID + 169341 + Layer + 2 + Points + + {344.96346869509995, 346.26317428240412} + {389.8333346048999, 328.08928298950207} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169340 + Info + 3 + + + + Class + LineGraphic + ControlPoints + + {31.999987284342428, -14.081351280212308} + {-28.500001271565793, 8.3333333333333144} + + ID + 169337 + Layer + 2 + Points + + {344.98861594084059, 323.71068461220347} + {391.1666679382335, 313.6666666666664} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169336 + + + + Class + LineGraphic + ControlPoints + + {31.999987284342428, -14.081351280212308} + {-40, 1.5446373167492311} + + ID + 169333 + Layer + 2 + Points + + {344.9995533451783, 301.1612218744512} + {394.50000127156665, 299.00000000000045} + + Style + + stroke + + Bezier + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169332 + Info + 3 + + + + Class + LineGraphic + ControlPoints + + {8.5833282470703125, -10.244596987647753} + {0, 0} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169051 + Info + 4 + + ID + 169062 + Layer + 2 + Points + + {272.41667175292969, 509.40064951817902} + {285.5, 503.81699882234847} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + Tail + + ID + 169208 + + + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169042 + Info + 4 + + ID + 169061 + Layer + 2 + Points + + {82.999997456869679, 300.27229985501288} + {238.34892458824362, 260.57913893040109} + + Style + + stroke + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + 0 + Legacy + + Pattern + 2 + TailArrow + 0 + + + Tail + + ID + 169034 + Position + 0.51973581314086914 + + + + Class + Group + Graphics + + + Bounds + {{419.66662216186666, 214.61452811107179}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169054 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.756045 + g + 0.75004 + r + 0.994455 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 exception} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 130.51770718892479}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169055 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 internal process} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 91.940789540609359}, {105.66666412353516, 33.089282989501953}} + Class + ShapedGraphic + ID + 169056 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 external process (middleware, tween)} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 158.54998334248924}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169057 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 view} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 186.58225949605369}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169058 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 callback} + VerticalPad + 0 + + + + Bounds + {{419.66662216186666, 63.908513387045019}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169059 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 event} + VerticalPad + 0 + + + + Bounds + {{406.9999504089372, 42.910746256511771}, {132.66667175292969, 207.81692504882812}} + Class + ShapedGraphic + ID + 169060 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + CornerRadius + 5 + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs20 \cf0 Legend} + VerticalPad + 0 + + TextPlacement + 0 + + + ID + 169053 + Layer + 2 + + + Bounds + {{233.5000012715667, 20.000000000000934}, {116, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 169052 + Layer + 2 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\b\fs24 \cf0 <%Canvas%>} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{285.5, 492.544677734375}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169051 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 BeforeRender} + VerticalPad + 0 + + + + Bounds + {{238.83337529500417, 335.17855853126167}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169340 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 HTTPForbidden} + VerticalPad + 0 + + + + Bounds + {{238.83337529500417, 312.54463200342093}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169336 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 PredicateMismatch} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 7.05596923828125} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169081 + Info + 2 + + ID + 169048 + Layer + 2 + Points + + {83.000001850648417, 128.2276785555359} + {82.999949137370791, 166.28868579864502} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169040 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169040 + + ID + 169047 + Layer + 2 + Points + + {83.000002543132396, 67.727678571434836} + {83.000002543132396, 105.18303707668386} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169039 + Info + 1 + + + + Bounds + {{30.166670481364818, 671.51189931233432}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169046 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 middleware egress} + VerticalPad + 0 + + + + Bounds + {{239, 629.51189931233432}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169045 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 finished callbacks} + VerticalPad + 0 + + + + Bounds + {{239, 572.5118993123325}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169044 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.327428 + g + 0.81823 + r + 0.995566 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 response callbacks} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 548.10604731241608}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169043 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 tween egress} + VerticalPad + 0 + + + + Bounds + {{238.83336130777977, 249.18303989230026}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169042 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 ContextFound} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 240.18303707668389}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169041 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 traversal} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 105.18303707668386}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169040 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 tween ingress} + VerticalPad + 0 + + + + Bounds + {{30.166670481364818, 45.18303707668386}, {105.66666412353516, 22.544641494750977}} + Class + ShapedGraphic + ID + 169039 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999208 + g + 0.811343 + r + 0.644457 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 middleware ingress } + VerticalPad + 0 + + + + Bounds + {{420.49995040893634, 472.78869058972316}, {105.66666412353516, 42.300594329833984}} + Class + ShapedGraphic + ID + 169358 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + {-0.49999999999999956, -0.5} + {-0.49999999999999956, 0.5} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 notfound_view / forbidden_view / exception_view} + VerticalPad + 0 + + + + Bounds + {{420.49995040893634, 290.66666666666691}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169344 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.756045 + g + 0.75004 + r + 0.994455 + + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 exception} + VerticalPad + 0 + + + + Bounds + {{238.83336512247806, 289.91071033477789}, {105.66666412353516, 22.544642175946908}} + Class + ShapedGraphic + ID + 169332 + Layer + 2 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + shadow + + Draws + NO + ShadowVector + {2, 2} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 HTTPNotFound} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169041 + + ID + 169035 + Layer + 2 + Points + + {82.999949137370791, 216.62202930450437} + {83.000002543132396, 240.18303707668389} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169082 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 7.05596923828125} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169075 + Info + 2 + + ID + 169034 + Layer + 2 + Points + + {82.999997456869679, 263.22767855635425} + {82.999997456869679, 335} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169041 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -8.9999999999999432} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169070 + + ID + 169033 + Layer + 2 + Points + + {82.999997456869679, 385.33334350585938} + {83.000002543132396, 452.41914073626253} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169076 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9839935302734375} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169046 + Info + 2 + + ID + 169128 + Layer + 2 + Points + + {83.000002543132396, 571.15068879140836} + {83.000002543132396, 671.51189931233421} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169043 + + + + Class + LineGraphic + ControlPoints + + {0, 7.055999755859375} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169355 + Info + 2 + + ID + 169357 + Layer + 2 + Points + + {473.33328247070392, 313.2113088426139} + {473.33338419596407, 338.15028762817326} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169344 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840011596679688} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169358 + + ID + 169362 + Layer + 2 + Points + + {473.33338359264764, 388.98363112285512} + {473.33328247070392, 472.78869058972316} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169356 + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 3 + KeepToScale + + Layers + + + Lock + NO + Name + no exceptions + Print + YES + View + YES + + + Lock + NO + Name + exceptions only + Print + YES + View + NO + + + Lock + NO + Name + all + Print + YES + View + NO + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2014-11-23 07:19:11 +0000 + Modifier + Steve Piercy + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {612, 792} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Request Processing + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Request Processing + + + Frame + {{35, 93}, {1394, 1325}} + ListView + + OutlineWidth + 178 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 163 + VisibleRegion + {{-231, -226}, {1037, 1186}} + Zoom + 1 + ZoomValues + + + Request Processing + 1 + 2 + + + + + diff --git a/docs/_static/pyramid_request_processing.png b/docs/_static/pyramid_request_processing.png new file mode 100644 index 000000000..2fbb1e164 Binary files /dev/null and b/docs/_static/pyramid_request_processing.png differ diff --git a/docs/_static/pyramid_request_processing.svg b/docs/_static/pyramid_request_processing.svg new file mode 100644 index 000000000..21bbcb532 --- /dev/null +++ b/docs/_static/pyramid_request_processing.svg @@ -0,0 +1,3 @@ + + +2014-11-23 07:19ZRequest Processingno exceptionsmiddleware ingress tween ingresstraversalContextFoundtween egressresponse callbacksfinished callbacksmiddleware egressBeforeRenderRequest ProcessingLegendeventcallbackviewexternal process (middleware, tween)internal processview pipelinepredicatesview lookuproute predicatesURL dispatchNewRequestNewResponseview mapper ingressviewview mapper egressresponse adapterdecorators ingressdecorators egressauthorization diff --git a/docs/_static/pyramid_router.svg b/docs/_static/pyramid_router.svg deleted file mode 100644 index 21bbcb532..000000000 --- a/docs/_static/pyramid_router.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -2014-11-23 07:19ZRequest Processingno exceptionsmiddleware ingress tween ingresstraversalContextFoundtween egressresponse callbacksfinished callbacksmiddleware egressBeforeRenderRequest ProcessingLegendeventcallbackviewexternal process (middleware, tween)internal processview pipelinepredicatesview lookuproute predicatesURL dispatchNewRequestNewResponseview mapper ingressviewview mapper egressresponse adapterdecorators ingressdecorators egressauthorization diff --git a/docs/narr/router.rst b/docs/narr/router.rst index 745c2faa1..e82b66801 100644 --- a/docs/narr/router.rst +++ b/docs/narr/router.rst @@ -9,7 +9,7 @@ Request Processing ================== -.. image:: ../_static/pyramid_router.svg +.. image:: ../_static/pyramid_request_processing.svg :alt: Request Processing Once a :app:`Pyramid` application is up and running, it is ready to accept -- cgit v1.2.3 From 29e7a7d80149e84b844b68f093a7676ba9e400ee Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Mon, 1 Dec 2014 13:45:01 -0800 Subject: replace router.png with pyramid_router.svg and make design consistent --- docs/_static/pyramid_router.graffle | 1621 +++++++++++++++++++++++++++++++++++ docs/_static/pyramid_router.png | Bin 0 -> 120643 bytes docs/_static/pyramid_router.svg | 3 + docs/narr/router.rst | 3 +- 4 files changed, 1626 insertions(+), 1 deletion(-) create mode 100644 docs/_static/pyramid_router.graffle create mode 100644 docs/_static/pyramid_router.png create mode 100644 docs/_static/pyramid_router.svg (limited to 'docs') diff --git a/docs/_static/pyramid_router.graffle b/docs/_static/pyramid_router.graffle new file mode 100644 index 000000000..217878426 --- /dev/null +++ b/docs/_static/pyramid_router.graffle @@ -0,0 +1,1621 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGrafflePro + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {576, 733}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2014-12-01 08:25:13 +0000 + Creator + Steve Piercy + DisplayScale + 1 0/72 in = 1 0/72 in + GraphDocumentVersion + 8 + GraphicsList + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169413 + + ID + 169414 + Points + + {202.04165903727232, 501.05557886759294} + {202.04165903727232, 528.77776209513161} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169412 + + + + Bounds + {{104.41666666666686, 528.77776209513161}, {195.24998474121094, 29}} + Class + ShapedGraphic + ID + 169413 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.999449 + g + 0.743511 + r + 0.872276 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Return the +\b response} + VerticalPad + 0 + + + + Bounds + {{104.41666666666657, 471.55557886759294}, {195.24998474121094, 29}} + Class + ShapedGraphic + ID + 169412 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Invoke the +\b view callable +\b0 ,\ +which returns a +\b response} + VerticalPad + 0 + + + + Bounds + {{291.21562524160186, 379.55555343627816}, {26, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 169411 + Line + + ID + 169410 + Offset + 7.3333320617675781 + Position + 0.4865129292011261 + RotationType + 0 + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 No} + + Wrap + NO + + + Class + LineGraphic + ControlPoints + + {34.791667904111534, 0} + {-33.999994913736998, 0} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169409 + + ID + 169410 + Points + + {280.85416589389337, 398.88888549804574} + {327.47912214508739, 398.88888549804574} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169404 + + + + Bounds + {{327.47912214508739, 384.38888549804574}, {156.62496948242188, 29}} + Class + ShapedGraphic + ID + 169409 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.756045 + g + 0.75004 + r + 0.994455 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Return the +\b Forbidden View} + VerticalPad + 0 + + + + Bounds + {{175.11595161998204, 438.9999954213917}, {30, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 169408 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Yes} + + Wrap + NO + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169412 + Info + 2 + + ID + 169407 + Points + + {202.04165267944353, 437.33333079020139} + {202.04165903727204, 471.55557886759294} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169404 + Info + 1 + + + + Bounds + {{171.708317756653, 329.24978243601743}, {30, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 169406 + Line + + ID + 169405 + Offset + -15.333334922790527 + Position + 0.45895844697952271 + RotationType + 0 + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Yes} + + Wrap + NO + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169404 + Info + 2 + + ID + 169405 + Points + + {202.04165267944353, 326.72223360222029} + {202.04165267944353, 360.44446818033811} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 3 + + + + Bounds + {{123.72916793823259, 360.44446818033811}, {156.62496948242188, 76.888862609863281}} + Class + ShapedGraphic + ID + 169404 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Diamond + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Current user has +\b authorization +\b0 to invoke the view callable?} + VerticalPad + 0 + + + + Bounds + {{283.07625736262997, 281.88889694213805}, {26, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 169403 + Line + + ID + 169402 + Offset + 7.3333320617675781 + Position + 0.4865129292011261 + RotationType + 0 + + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 No} + + Wrap + NO + + + Class + LineGraphic + ControlPoints + + {34.791667904111534, 0} + {-33.999994913736998, 0} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169401 + + ID + 169402 + Points + + {265.20833208871704, 301.22222900390562} + {327.47911580403627, 301.22222900390562} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 3 + + + + Bounds + {{327.47911580403627, 286.72222900390562}, {156.62496948242188, 29}} + Class + ShapedGraphic + ID + 169401 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.756045 + g + 0.75004 + r + 0.994455 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Return the +\b Not Found View} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 3 + Info + 2 + + ID + 169400 + Points + + {202.04165903727255, 251} + {202.04165776570633, 276.22223154703772} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169393 + + + + Bounds + {{139.37498982747391, 276.22223154703778}, {125.33333587646484, 50}} + Class + ShapedGraphic + ID + 3 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Diamond + Style + + fill + + Color + + b + 0.422927 + g + 1 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 View callable found?} + VerticalPad + 0 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169393 + Info + 2 + + ID + 169396 + Points + + {202.04165903727255, 196.77777862548834} + {202.04165903727255, 222} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169392 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169392 + + ID + 169395 + Points + + {202.04165903727255, 142.55555725097662} + {202.04165903727255, 167.77777862548834} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 169391 + Info + 1 + + + + Class + LineGraphic + ControlPoints + + {0, 6.9840087890625} + {0, -9} + + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 169391 + + ID + 169385 + Points + + {202.04165903727255, 82.666667938232479} + {202.04165903727255, 107.88888931274418} + + Style + + stroke + + Bezier + + Color + + b + 0.0980392 + g + 0.0980392 + r + 0.0980392 + + HeadArrow + SharpArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 19 + Info + 1 + + + + Bounds + {{104.41666666666708, 222}, {195.24998474121094, 29}} + Class + ShapedGraphic + ID + 169393 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Look up a +\b view callable +\b0 in the +\b registry +\b0 using the +\b context +\b0 and +\b view name} + VerticalPad + 0 + + + + Bounds + {{104.41666666666708, 167.77777862548834}, {195.24998474121094, 29}} + Class + ShapedGraphic + ID + 169392 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\b\fs20 \cf0 Traversal +\b0 locates\ +the +\b context +\b0 and +\b view name} + VerticalPad + 0 + + + + Bounds + {{104.41666666666708, 107.88888931274418}, {195.24998474121094, 34.666667938232422}} + Class + ShapedGraphic + ID + 169391 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Traverse the model graph\ +from the +\b root +\b0 using the +\b path} + VerticalPad + 0 + + + + Bounds + {{104.41666666666708, 48.000000000000043}, {195.24998474121094, 34.666667938232422}} + Class + ShapedGraphic + ID + 19 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + Color + + b + 0.815377 + g + 1 + r + 0.820561 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs20 \cf0 Obtain a root object from the +\b root factory} + VerticalPad + 0 + + + + Bounds + {{229.04165903727255, 20.000000000000934}, {90, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 169390 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\b\fs24 \cf0 <%Canvas%>} + VerticalPad + 0 + + Wrap + NO + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2014-12-01 09:19:51 +0000 + Modifier + Steve Piercy + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {612, 792} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Pyramid Router + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Pyramid Router + + + Frame + {{96, 20}, {1076, 1286}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{8, -10}, {532, 754.66666666666663}} + Zoom + 1.5 + ZoomValues + + + Pyramid Router + 1.5 + 1 + + + + + diff --git a/docs/_static/pyramid_router.png b/docs/_static/pyramid_router.png new file mode 100644 index 000000000..3c9f81158 Binary files /dev/null and b/docs/_static/pyramid_router.png differ diff --git a/docs/_static/pyramid_router.svg b/docs/_static/pyramid_router.svg new file mode 100644 index 000000000..1537777c9 --- /dev/null +++ b/docs/_static/pyramid_router.svg @@ -0,0 +1,3 @@ + + +2014-12-01 09:19ZPyramid RouterLayer 1Pyramid RouterObtain a root object from the root factoryTraverse the model graphfrom the root using the pathTraversal locatesthe context and view nameLook up a view callable in the registry using the context and view nameView callable found?Return the Not Found ViewNoCurrent user has authorization to invoke the view callable?YesYesReturn the Forbidden ViewNoInvoke the view callable,which returns a responseReturn the response diff --git a/docs/narr/router.rst b/docs/narr/router.rst index e82b66801..693217a6b 100644 --- a/docs/narr/router.rst +++ b/docs/narr/router.rst @@ -119,7 +119,8 @@ request enters a :app:`Pyramid` application through to the point that #. The :term:`thread local` stack is popped. -.. image:: router.png +.. image:: ../_static/pyramid_router.svg + :alt: Pyramid Router This is a very high-level overview that leaves out various details. For more detail about subsystems invoked by the :app:`Pyramid` router such as -- cgit v1.2.3 From 2711913daac645dc1960074d6c5121c8fb49b772 Mon Sep 17 00:00:00 2001 From: Adrian Teng Date: Wed, 17 Dec 2014 00:06:27 +0000 Subject: Add documentation on handling CORS pre-flights --- docs/narr/webob.rst | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'docs') diff --git a/docs/narr/webob.rst b/docs/narr/webob.rst index 6a331e4bf..7d459a1f5 100644 --- a/docs/narr/webob.rst +++ b/docs/narr/webob.rst @@ -310,6 +310,10 @@ Python's ``urllib2`` instead of a Javascript AJAX request: req = urllib2.Request('http://localhost:6543/', json_payload, headers) resp = urllib2.urlopen(req) +If you are doing Cross-origin resource sharing (CORS), then the standard requires the browser to do a pre-flight HTTP OPTIONS request. The easiest way to handling this is adding an extra ``view_config`` for the same route, with ``request_method`` set to ``OPTIONS``, and setting the desired response header before returning. You can find examples of response headers here_. + +.. _here: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests + .. index:: single: cleaning up after request -- cgit v1.2.3 From 023afb1fd5eedc3f8ba24d95cad1864d05eb0444 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 16 Dec 2014 19:53:58 -0500 Subject: repoze who docs moved --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index 4bc8e2172..fa4578275 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -74,7 +74,7 @@ intersphinx_mapping = { 'http://docs.pylonsproject.org/projects/deform/en/latest', None), 'sqla': ('http://docs.sqlalchemy.org/en/latest', None), - 'who': ('http://docs.repoze.org/who/latest', None), + 'who': ('http://repozewho.readthedocs.org/en/latest', None), 'python': ('http://docs.python.org', None), 'python3': ('http://docs.python.org/3', None), 'tstring': -- cgit v1.2.3 From 2660f5053de5383aacf4ceff3d4e05d7e73f1635 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 16 Dec 2014 19:54:03 -0500 Subject: 79 cols --- docs/narr/webob.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/webob.rst b/docs/narr/webob.rst index 7d459a1f5..0eb070b06 100644 --- a/docs/narr/webob.rst +++ b/docs/narr/webob.rst @@ -310,7 +310,11 @@ Python's ``urllib2`` instead of a Javascript AJAX request: req = urllib2.Request('http://localhost:6543/', json_payload, headers) resp = urllib2.urlopen(req) -If you are doing Cross-origin resource sharing (CORS), then the standard requires the browser to do a pre-flight HTTP OPTIONS request. The easiest way to handling this is adding an extra ``view_config`` for the same route, with ``request_method`` set to ``OPTIONS``, and setting the desired response header before returning. You can find examples of response headers here_. +If you are doing Cross-origin resource sharing (CORS), then the standard +requires the browser to do a pre-flight HTTP OPTIONS request. The easiest way +to handling this is adding an extra ``view_config`` for the same route, with +``request_method`` set to ``OPTIONS``, and setting the desired response header +before returning. You can find examples of response headers here_. .. _here: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests -- cgit v1.2.3 From 0fa3ddf54b1324a8bcbf26b0cc7df8a06afe7c4f Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Tue, 23 Dec 2014 01:09:16 -0800 Subject: - remove pyramid_router.png because an .svg version is available per @tseaver --- docs/_static/pyramid_router.png | Bin 120643 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/_static/pyramid_router.png (limited to 'docs') diff --git a/docs/_static/pyramid_router.png b/docs/_static/pyramid_router.png deleted file mode 100644 index 3c9f81158..000000000 Binary files a/docs/_static/pyramid_router.png and /dev/null differ -- cgit v1.2.3 From cac2128fcc71ad2e0c9b9f22046dc47adb92dfd0 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Tue, 23 Dec 2014 03:23:19 -0800 Subject: - add an index to the API directory for better SEO --- docs/api/index.rst | 12 ++++++++++++ docs/index.rst | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 docs/api/index.rst (limited to 'docs') diff --git a/docs/api/index.rst b/docs/api/index.rst new file mode 100644 index 000000000..cb38aa0b2 --- /dev/null +++ b/docs/api/index.rst @@ -0,0 +1,12 @@ +.. _html_api_documentation: + +API Documentation +================= + +Comprehensive reference material for every public API exposed by :app:`Pyramid`: + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/docs/index.rst b/docs/index.rst index ac16ff237..fc7560e8f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -135,8 +135,6 @@ platforms. tutorials/wiki/index.rst tutorials/modwsgi/index.rst -.. _html_api_documentation: - API Documentation ================= @@ -146,6 +144,7 @@ Comprehensive reference material for every public API exposed by :app:`Pyramid`: :maxdepth: 1 :glob: + api/index api/* Change History -- cgit v1.2.3 From 8c54a34d5d3211537b8705b04ae8662274641828 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 26 Dec 2014 02:32:58 -0800 Subject: - adding back .png file because PDF cannot include and build SVG files. Also renamed images to use a 'imagename.*' wildcard so that the correct format is chosen. See http://stackoverflow.com/questions/6473660/using-sphinx-docs-how-can-i-specify-png-image-formats-for-html-builds-and-pdf-im --- docs/_static/pyramid_router.png | Bin 0 -> 120643 bytes docs/narr/router.rst | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/_static/pyramid_router.png (limited to 'docs') diff --git a/docs/_static/pyramid_router.png b/docs/_static/pyramid_router.png new file mode 100644 index 000000000..3c9f81158 Binary files /dev/null and b/docs/_static/pyramid_router.png differ diff --git a/docs/narr/router.rst b/docs/narr/router.rst index 693217a6b..6f90c70cc 100644 --- a/docs/narr/router.rst +++ b/docs/narr/router.rst @@ -9,7 +9,7 @@ Request Processing ================== -.. image:: ../_static/pyramid_request_processing.svg +.. image:: ../_static/pyramid_request_processing.* :alt: Request Processing Once a :app:`Pyramid` application is up and running, it is ready to accept @@ -119,7 +119,7 @@ request enters a :app:`Pyramid` application through to the point that #. The :term:`thread local` stack is popped. -.. image:: ../_static/pyramid_router.svg +.. image:: ../_static/pyramid_router.* :alt: Pyramid Router This is a very high-level overview that leaves out various details. For more -- cgit v1.2.3 From d579409e656df9f92a89000d66e60ec71b5857bc Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 26 Dec 2014 21:35:06 -0800 Subject: - update theme with new image --- docs/_themes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/_themes b/docs/_themes index 3bec9280a..b14bf8c2a 160000 --- a/docs/_themes +++ b/docs/_themes @@ -1 +1 @@ -Subproject commit 3bec9280a6cedb15e97e5899021aa8d723c25388 +Subproject commit b14bf8c2a0d95ae8e3d38d07ad3721370ae6f3f8 -- cgit v1.2.3 From 1236dec0dcfd916bca4e233587f86baa8d2418a8 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Sat, 27 Dec 2014 00:18:23 -0800 Subject: Add the `set_response_factory` API --- docs/narr/hooks.rst | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'docs') diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index 4da36e730..f557527bb 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -354,6 +354,68 @@ We attach and cache an object named ``extra`` to the ``request`` object. .. _beforerender_event: +.. index:: + single: response factory + +.. _changing_the_response_factory: + +Changing the Response Factory +---------------------------- + +Whenever :app:`Pyramid` returns a response from a view it creates a +:term:`response` object. By default, an instance of the +:class:`pyramid.response.Response` class is created to represent the response +object. + +The class (aka "factory") that :app:`Pyramid` uses to create a response object +instance can be changed by passing a ``response_factory`` argument to the +constructor of the :term:`configurator`. This argument can be either a +callable or a :term:`dotted Python name` representing a callable. + +.. code-block:: python + :linenos: + + from pyramid.response import Response + + class MyResponse(Response): + pass + + config = Configurator(response_factory=MyResponse) + +If you're doing imperative configuration, and you'd rather do it after you've +already constructed a :term:`configurator` it can also be registered via the +:meth:`pyramid.config.Configurator.set_response_factory` method: + +.. code-block:: python + :linenos: + + from pyramid.config import Configurator + from pyramid.response import Response + + class MyResponse(Response): + pass + + config = Configurator() + config.set_response_factory(MyRequest) + +If you are already using a custom ```request_factory`` you can also set the +``ResponseClass`` on your :class:`pyramid.request.Request`: + +.. code-block:: python + :linenos: + + from pyramid.config import Configurator + from pyramid.response import Response + from pyramid.request import Request + + class MyResponse(Response): + pass + + class MyRequest(Request): + ResponseClass = MyResponse + + config = Configurator() + Using The Before Render Event ----------------------------- -- cgit v1.2.3 From e8a666655b5365a0adde32f2bd387b0d42690384 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Sat, 27 Dec 2014 00:23:18 -0800 Subject: basic docs cleanup --- docs/glossary.rst | 3 +++ docs/narr/hooks.rst | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/glossary.rst b/docs/glossary.rst index 01300a0be..05ff7c114 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -16,6 +16,9 @@ Glossary An object which, provided a :term:`WSGI` environment as a single positional argument, returns a Pyramid-compatible request. + response factory + An object which returns a Pyramid-compatible response. + response An object returned by a :term:`view callable` that represents response data returned to the requesting user agent. It must implement the diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index f557527bb..4702c09b0 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -360,7 +360,7 @@ We attach and cache an object named ``extra`` to the ``request`` object. .. _changing_the_response_factory: Changing the Response Factory ----------------------------- +------------------------------- Whenever :app:`Pyramid` returns a response from a view it creates a :term:`response` object. By default, an instance of the -- cgit v1.2.3 From 807e941787e157db882fcd95e13f5cafb7ebde7f Mon Sep 17 00:00:00 2001 From: John Anderson Date: Sat, 27 Dec 2014 13:33:39 -0800 Subject: Added a version added flag --- docs/narr/hooks.rst | 2 ++ 1 file changed, 2 insertions(+) (limited to 'docs') diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index 4702c09b0..689ce9dc2 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -362,6 +362,8 @@ We attach and cache an object named ``extra`` to the ``request`` object. Changing the Response Factory ------------------------------- +.. versionadded:: 1.6 + Whenever :app:`Pyramid` returns a response from a view it creates a :term:`response` object. By default, an instance of the :class:`pyramid.response.Response` class is created to represent the response -- cgit v1.2.3 From 32cb805132e8149a276a8c65fdfa961384e8254e Mon Sep 17 00:00:00 2001 From: John Anderson Date: Thu, 1 Jan 2015 15:03:56 -0800 Subject: Mkae the response factory a factory that takes a request --- docs/glossary.rst | 3 ++- docs/narr/hooks.rst | 29 ++++++----------------------- 2 files changed, 8 insertions(+), 24 deletions(-) (limited to 'docs') diff --git a/docs/glossary.rst b/docs/glossary.rst index 05ff7c114..38133f68f 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -17,7 +17,8 @@ Glossary positional argument, returns a Pyramid-compatible request. response factory - An object which returns a Pyramid-compatible response. + An object which, provied a :term:`request` as a single positional + argument, returns a Pyramid-compatible response. response An object returned by a :term:`view callable` that represents response diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index 689ce9dc2..e250c2d7e 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -369,10 +369,10 @@ Whenever :app:`Pyramid` returns a response from a view it creates a :class:`pyramid.response.Response` class is created to represent the response object. -The class (aka "factory") that :app:`Pyramid` uses to create a response object -instance can be changed by passing a ``response_factory`` argument to the -constructor of the :term:`configurator`. This argument can be either a -callable or a :term:`dotted Python name` representing a callable. +The factory that :app:`Pyramid` uses to create a response object instance can be +changed by passing a ``response_factory`` argument to the constructor of the +:term:`configurator`. This argument can be either a callable or a +:term:`dotted Python name` representing a callable. .. code-block:: python :linenos: @@ -382,7 +382,7 @@ callable or a :term:`dotted Python name` representing a callable. class MyResponse(Response): pass - config = Configurator(response_factory=MyResponse) + config = Configurator(response_factory=lambda r: MyResponse()) If you're doing imperative configuration, and you'd rather do it after you've already constructed a :term:`configurator` it can also be registered via the @@ -398,25 +398,8 @@ already constructed a :term:`configurator` it can also be registered via the pass config = Configurator() - config.set_response_factory(MyRequest) - -If you are already using a custom ```request_factory`` you can also set the -``ResponseClass`` on your :class:`pyramid.request.Request`: - -.. code-block:: python - :linenos: - - from pyramid.config import Configurator - from pyramid.response import Response - from pyramid.request import Request - - class MyResponse(Response): - pass - - class MyRequest(Request): - ResponseClass = MyResponse + config.set_response_factory(lambda r: MyResponse()) - config = Configurator() Using The Before Render Event ----------------------------- -- cgit v1.2.3 From ff01cdf0e392eb4e7926970a0cdee75663edb431 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Thu, 1 Jan 2015 15:10:55 -0800 Subject: Fix typo --- docs/glossary.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/glossary.rst b/docs/glossary.rst index 38133f68f..911c22075 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -17,7 +17,7 @@ Glossary positional argument, returns a Pyramid-compatible request. response factory - An object which, provied a :term:`request` as a single positional + An object which, provided a :term:`request` as a single positional argument, returns a Pyramid-compatible response. response -- cgit v1.2.3 From 22c836ecbc6f10c4851d88017243f91e469016aa Mon Sep 17 00:00:00 2001 From: John Anderson Date: Thu, 1 Jan 2015 22:17:13 -0800 Subject: Updated the docs to talk about `--format` --- docs/narr/commandline.rst | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) (limited to 'docs') diff --git a/docs/narr/commandline.rst b/docs/narr/commandline.rst index 4f16617c4..02bb6138e 100644 --- a/docs/narr/commandline.rst +++ b/docs/narr/commandline.rst @@ -312,24 +312,49 @@ For example: :linenos: $ $VENV/bin/proutes development.ini - Name Pattern View - ---- ------- ---- - home / - home2 / - another /another None - static/ static/*subpath - catchall /*subpath - -``proutes`` generates a table with three columns: *Name*, *Pattern*, + Name Pattern View + ---- ------- ---- + debugtoolbar /_debug_toolbar/*subpath * + __static/ /static/*subpath dummy_starter:static/ * + __static2/ /static2/*subpath /var/www/static/ * + __pdt_images/ /pdt_images/*subpath pyramid_debugtoolbar:static/img/ * + a / * + no_view_attached / * + route_and_view_attached / app1.standard_views.route_and_view_attached * + method_conflicts /conflicts app1.standard_conflicts + multiview /multiview app1.standard_views.multiview GET,PATCH + not_post /not_post app1.standard_views.multview !POST,* + +``proutes`` generates a table with three columns: *Name*, *Pattern*, *Method*, and *View*. The items listed in the Name column are route names, the items listed in the Pattern column are route patterns, and the items listed in the View column are representations of the view callable that will be invoked when a request matches the associated -route pattern. The view column may show ``None`` if no associated view +route pattern. The view column may show ```` if no associated view callable could be found. If no routes are configured within your application, nothing will be printed to the console when ``proutes`` is executed. +It is convenient when using the ``proutes`` often to configure which columns +and the order you would like to view them. To facilitate this, ``proutes`` will +look for a special ``[proutes]`` section in your INI file and use those as +defaults. + +For example you may remove request method and place the view first: + +.. code-block:: text + :linenos: + + [proutes] + format = view + name + pattern + +If you want to temporarily configure the columns and order there is the +``--format` which is a comma separated list of columns you want to include. The +current available formats are ``name``, ``pattern``, ``view``, and ``method``. + + .. index:: pair: tweens; printing single: ptweens -- cgit v1.2.3 From 83a400a3cd121fe65d33e796c28a199b35ab67e5 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Thu, 1 Jan 2015 22:25:25 -0800 Subject: Terminated the highlight on ``format`` --- docs/narr/commandline.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/commandline.rst b/docs/narr/commandline.rst index 02bb6138e..aca0ff425 100644 --- a/docs/narr/commandline.rst +++ b/docs/narr/commandline.rst @@ -351,7 +351,7 @@ For example you may remove request method and place the view first: pattern If you want to temporarily configure the columns and order there is the -``--format` which is a comma separated list of columns you want to include. The +``--format`` which is a comma separated list of columns you want to include. The current available formats are ``name``, ``pattern``, ``view``, and ``method``. -- cgit v1.2.3 From ef2a4abb2850af8d21995f04e9f30e6a8949ff9d Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 7 Jan 2015 14:42:27 +0200 Subject: Fix "pyramid" spelling --- docs/narr/hybrid.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/hybrid.rst b/docs/narr/hybrid.rst index 4a3258d35..1c324d22b 100644 --- a/docs/narr/hybrid.rst +++ b/docs/narr/hybrid.rst @@ -453,7 +453,7 @@ commonly in route declarations that look like this: .. code-block:: python :linenos: - from pryamid.static import static_view + from pyramid.static import static_view www = static_view('mypackage:static', use_subpath=True) -- cgit v1.2.3 From b6ad615549fb52c40f55760027bffbdd1a919aa1 Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 7 Jan 2015 14:44:27 +0200 Subject: Fix "add_subscriber" spelling --- docs/narr/introspector.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'docs') diff --git a/docs/narr/introspector.rst b/docs/narr/introspector.rst index a7bde4cf7..0ff1615d1 100644 --- a/docs/narr/introspector.rst +++ b/docs/narr/introspector.rst @@ -121,7 +121,7 @@ introspectables in categories not described here. ``subscriber`` The subscriber callable object (the resolution of the ``subscriber`` - argument passed to ``add_susbcriber``). + argument passed to ``add_subscriber``). ``interfaces`` @@ -137,12 +137,12 @@ introspectables in categories not described here. ``predicates`` The predicate objects created as the result of passing predicate arguments - to ``add_susbcriber`` + to ``add_subscriber`` ``derived_predicates`` Wrappers around the predicate objects created as the result of passing - predicate arguments to ``add_susbcriber`` (to be used when predicates take + predicate arguments to ``add_subscriber`` (to be used when predicates take only one value but must be passed more than one). ``response adapters`` -- cgit v1.2.3 From 99d7c44610ad56bac0e90ba119b003ef11b2eb5a Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 7 Jan 2015 14:51:45 +0200 Subject: Fix rendering --- docs/narr/sessions.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'docs') diff --git a/docs/narr/sessions.rst b/docs/narr/sessions.rst index 8da743a01..f20a36d81 100644 --- a/docs/narr/sessions.rst +++ b/docs/narr/sessions.rst @@ -44,7 +44,7 @@ It is digitally signed, however, and thus its data cannot easily be tampered with. You can configure this session factory in your :app:`Pyramid` application -by using the :meth:`pyramid.config.Configurator.set_session_factory`` method. +by using the :meth:`pyramid.config.Configurator.set_session_factory` method. .. code-block:: python :linenos: @@ -380,7 +380,7 @@ Checking CSRF Tokens Manually ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In request handling code, you can check the presence and validity of a CSRF -token with :func:`pyramid.session.check_csrf_token(request)``. If the token is +token with ``pyramid.session.check_csrf_token(request)``. If the token is valid, it will return ``True``, otherwise it will raise ``HTTPBadRequest``. Optionally, you can specify ``raises=False`` to have the check return ``False`` instead of raising an exception. -- cgit v1.2.3 From 77db3c2c000d7209d1c486585d7227181e2a4286 Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 7 Jan 2015 15:00:06 +0200 Subject: Fix typos in configuration introspection documentation --- docs/narr/introspector.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'docs') diff --git a/docs/narr/introspector.rst b/docs/narr/introspector.rst index 0ff1615d1..8caba522c 100644 --- a/docs/narr/introspector.rst +++ b/docs/narr/introspector.rst @@ -450,9 +450,9 @@ introspectables in categories not described here. The :class:`pyramid.interfaces.IRendererInfo` object which represents this template's renderer. -``view mapper`` +``view mappers`` - Each introspectable in the ``permissions`` category represents a call to + Each introspectable in the ``view mappers`` category represents a call to :meth:`pyramid.config.Configurator.add_view` that has an explicit ``mapper`` argument to *or* a call to :meth:`pyramid.config.Configurator.set_view_mapper`; each will have @@ -481,8 +481,8 @@ introspectables in categories not described here. ``translation directories`` - Each introspectable in the ``asset overrides`` category represents an - individual element in a ``specs`` argument passed to + Each introspectable in the ``translation directories`` category represents + an individual element in a ``specs`` argument passed to :meth:`pyramid.config.Configurator.add_translation_dirs`; each will have the following data. @@ -511,7 +511,7 @@ introspectables in categories not described here. ``type`` - ``implict`` or ``explicit`` as a string. + ``implicit`` or ``explicit`` as a string. ``under`` -- cgit v1.2.3 From 3702ab07e835a06f30abf5ceb626f81114115062 Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 7 Jan 2015 15:09:26 +0200 Subject: Fix typo --- docs/narr/hooks.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index e250c2d7e..5bba0d143 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -777,7 +777,7 @@ If you want to implement your own Response object instead of using the :class:`pyramid.response.Response` object in any capacity at all, you'll have to make sure the object implements every attribute and method outlined in :class:`pyramid.interfaces.IResponse` and you'll have to ensure that it uses -``zope.interface.implementer(IResponse)`` as a class decoratoror. +``zope.interface.implementer(IResponse)`` as a class decorator. .. code-block:: python :linenos: -- cgit v1.2.3 From 47e85294779814f14e02327eb4d378197bbaeb29 Mon Sep 17 00:00:00 2001 From: Pavlo Kapyshin Date: Wed, 7 Jan 2015 19:10:31 +0200 Subject: Provide a ref to check_csrf_token --- docs/narr/sessions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/sessions.rst b/docs/narr/sessions.rst index f20a36d81..5c103405a 100644 --- a/docs/narr/sessions.rst +++ b/docs/narr/sessions.rst @@ -380,7 +380,7 @@ Checking CSRF Tokens Manually ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In request handling code, you can check the presence and validity of a CSRF -token with ``pyramid.session.check_csrf_token(request)``. If the token is +token with :func:`pyramid.session.check_csrf_token`. If the token is valid, it will return ``True``, otherwise it will raise ``HTTPBadRequest``. Optionally, you can specify ``raises=False`` to have the check return ``False`` instead of raising an exception. -- cgit v1.2.3 From 8b5000f44cddd24df111c8a1d2ff65ee6d37afbb Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Thu, 22 Jan 2015 02:46:09 -0800 Subject: move index and reference down to proper section so that docs will build on master again --- docs/narr/hooks.rst | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'docs') diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index 5bba0d143..17cae2c67 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -348,12 +348,6 @@ We attach and cache an object named ``extra`` to the ``request`` object. >>> request.extra.prop the property -.. index:: - single: before render event - single: adding renderer globals - -.. _beforerender_event: - .. index:: single: response factory @@ -400,6 +394,11 @@ already constructed a :term:`configurator` it can also be registered via the config = Configurator() config.set_response_factory(lambda r: MyResponse()) +.. index:: + single: before render event + single: adding renderer globals + +.. _beforerender_event: Using The Before Render Event ----------------------------- -- cgit v1.2.3 From 0e4dcf9f85babd94dcd9fc59513d257b4aba8d40 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Thu, 22 Jan 2015 03:46:27 -0800 Subject: apply changes from #1538 and #1539 --- docs/narr/logging.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'docs') diff --git a/docs/narr/logging.rst b/docs/narr/logging.rst index c16673ae6..921883091 100644 --- a/docs/narr/logging.rst +++ b/docs/narr/logging.rst @@ -254,16 +254,15 @@ level unless they're explicitly set differently. Meaning the ``myapp.views``, ``myapp.models`` (and all your app's modules') loggers by default have an effective level of ``DEBUG`` too. -For more advanced filtering, the logging module provides a `Filter -`_ object; however it cannot be used -directly from the configuration file. +For more advanced filtering, the logging module provides a +:class:`logging.Filter` object; however it cannot be used directly from the +configuration file. -Advanced Configuration +Advanced Configuration ---------------------- -To capture log output to a separate file, use a `FileHandler -`_ (or a `RotatingFileHandler -`_): +To capture log output to a separate file, use :class:`logging.FileHandler` (or +:class:`logging.handlers.RotatingFileHandler`): .. code-block:: ini @@ -317,8 +316,9 @@ output, etc., but not web traffic. For web traffic logging Paste provides the :term:`middleware`. TransLogger produces logs in the `Apache Combined Log Format `_. But TransLogger does not write to files, the Python logging system must be -configured to do this. The Python FileHandler_ logging handler can be used -alongside TransLogger to create an ``access.log`` file similar to Apache's. +configured to do this. The Python :class:`logging.FileHandler` logging +handler can be used alongside TransLogger to create an ``access.log`` file +similar to Apache's. Like any standard :term:`middleware` with a Paste entry point, TransLogger can be configured to wrap your application using ``.ini`` file syntax. First, -- cgit v1.2.3 From b8ba0f1ed25b118aeb05accb23d872b3a72dc548 Mon Sep 17 00:00:00 2001 From: John Anderson Date: Thu, 22 Jan 2015 07:29:02 -0800 Subject: Make more ways to configure [proutes] section --- docs/narr/commandline.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'docs') diff --git a/docs/narr/commandline.rst b/docs/narr/commandline.rst index aca0ff425..3dcb092e2 100644 --- a/docs/narr/commandline.rst +++ b/docs/narr/commandline.rst @@ -350,6 +350,17 @@ For example you may remove request method and place the view first: name pattern +You can also separate the formats with commas or spaces: + +.. code-block:: text + :linenos: + + [proutes] + format = view name pattern + + [proutes] + format = view, name, pattern + If you want to temporarily configure the columns and order there is the ``--format`` which is a comma separated list of columns you want to include. The current available formats are ``name``, ``pattern``, ``view``, and ``method``. -- cgit v1.2.3 From c7bf2744f332c0294d8d673d21b56f5edacb2eae Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Tue, 27 Jan 2015 14:51:58 -0600 Subject: fix count --- docs/narr/commandline.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/narr/commandline.rst b/docs/narr/commandline.rst index 3dcb092e2..1fe2d9278 100644 --- a/docs/narr/commandline.rst +++ b/docs/narr/commandline.rst @@ -325,7 +325,7 @@ For example: multiview /multiview app1.standard_views.multiview GET,PATCH not_post /not_post app1.standard_views.multview !POST,* -``proutes`` generates a table with three columns: *Name*, *Pattern*, *Method*, +``proutes`` generates a table with four columns: *Name*, *Pattern*, *Method*, and *View*. The items listed in the Name column are route names, the items listed in the Pattern column are route patterns, and the items listed in the View column are representations of the -- cgit v1.2.3 From 5de795938f4ec23c53cd4678021e36a72d3188cb Mon Sep 17 00:00:00 2001 From: Bert JW Regeer Date: Sat, 7 Feb 2015 01:06:29 -0700 Subject: Document the factory requires a positional argument --- docs/narr/hooks.rst | 3 +++ 1 file changed, 3 insertions(+) (limited to 'docs') diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index 17cae2c67..8e6cf8343 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -368,6 +368,9 @@ changed by passing a ``response_factory`` argument to the constructor of the :term:`configurator`. This argument can be either a callable or a :term:`dotted Python name` representing a callable. +The factory takes a single positional argument, which is a :term:`Request` +object. The argument may be the value ``None``. + .. code-block:: python :linenos: -- cgit v1.2.3 From da5f5f9ea02c2c9830c7ae016547d2bedd0e0171 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Sat, 7 Feb 2015 02:38:54 -0600 Subject: move the IResponseFactory into the public api --- docs/api/interfaces.rst | 3 +++ docs/glossary.rst | 3 ++- docs/narr/hooks.rst | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'docs') diff --git a/docs/api/interfaces.rst b/docs/api/interfaces.rst index a62976d8a..de2a664a4 100644 --- a/docs/api/interfaces.rst +++ b/docs/api/interfaces.rst @@ -56,6 +56,9 @@ Other Interfaces .. autointerface:: IRenderer :members: + .. autointerface:: IResponseFactory + :members: + .. autointerface:: IViewMapperFactory :members: diff --git a/docs/glossary.rst b/docs/glossary.rst index 911c22075..9c0ea8598 100644 --- a/docs/glossary.rst +++ b/docs/glossary.rst @@ -18,7 +18,8 @@ Glossary response factory An object which, provided a :term:`request` as a single positional - argument, returns a Pyramid-compatible response. + argument, returns a Pyramid-compatible response. See + :class:`pyramid.interfaces.IResponseFactory`. response An object returned by a :term:`view callable` that represents response diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst index 8e6cf8343..4fd7670b9 100644 --- a/docs/narr/hooks.rst +++ b/docs/narr/hooks.rst @@ -364,12 +364,12 @@ Whenever :app:`Pyramid` returns a response from a view it creates a object. The factory that :app:`Pyramid` uses to create a response object instance can be -changed by passing a ``response_factory`` argument to the constructor of the -:term:`configurator`. This argument can be either a callable or a -:term:`dotted Python name` representing a callable. +changed by passing a :class:`pyramid.interfaces.IResponseFactory` argument to +the constructor of the :term:`configurator`. This argument can be either a +callable or a :term:`dotted Python name` representing a callable. The factory takes a single positional argument, which is a :term:`Request` -object. The argument may be the value ``None``. +object. The argument may be ``None``. .. code-block:: python :linenos: -- cgit v1.2.3